我需要将类中定义的数组的大小作为依赖于情境的值.为了澄清这一点,以下具有固定数组大小的代码显示没有错误
class CMinimalServer : public GBDataAccess
{
public:
DWORD IdG[30];
VARIANT Value[30];
WORD Quality[30];
FILETIME Timestamp[30], ft;
HRESULT Error[30];
Run Code Online (Sandbox Code Playgroud)
但是我需要在上面的例子中将数组的大小设置为'30'作为可靠值.我的意思是说,假设代码的其他部分,我有
if (a==b)
Number = 10;
else
Number = 30;
Run Code Online (Sandbox Code Playgroud)
因此,阵列的大小应为10和30.
但是以下代码显示错误
class CMinimalServer : public GBDataAccess
{
public:
DWORD IdG[Number ];
VARIANT Value[Number ];
WORD Quality[Number ];
FILETIME Timestamp[Number ], ft;
HRESULT Error[Number ];
Run Code Online (Sandbox Code Playgroud)
我试过了
#define Number 16
Run Code Online (Sandbox Code Playgroud)
在顶部和上面的代码显示没有错误,但问题是我不能修改代码的其他部分中的变量
////解决方案中的一些问题
我根据建议修改了代码:我必须在类中创建函数(createTag).
// Class definition
class CMinimalServer : public GBDataAccess
{
public:
struct Entry
{
DWORD IdG;
VARIANT Value;
WORD Quality;
FILETIME Timestamp;
HRESULT Error;
};
private:
FILETIME ft;
void createTag()
{
DWORD ids[NumberOfPoints],i;
VARIANT val;
val.vt = VT_BOOL;
unsigned c=0;
for (i = 0; i<NumberOfPoints; i++)
{
wchar_t opcid[NumberOfPoints];
wsprintfW(opcid, L"Item%02i", i+1);
val.boolVal = VARIANT_FALSE;
srv.GBCreateItem(&ids[i], i, opcid, OPC_READABLE|OPC_WRITEABLE, 0, &val);
Entry.IdG[c] = ids[i];
Value[c].vt= VT_BOOL;
c++;
}
.....
}
//Main function
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
CMinimalServer() = default;
CMinimalServer(int number) : tab_(number){};
std::vector<Entry> tab_ = std::vector<Entry>(30);
}
Run Code Online (Sandbox Code Playgroud)
问题是:
Entry.idG [c]显示错误.
我们在C++中有vector
#include <vector>
class CMinimalServer : public GBDataAccess {
public:
struct Entry {
DWORD IdG;
VARIANT Value;
WORD Quality;
FILETIME Timestamp;
HRESULT Error;
};
CMinimalServer() = default;
CMinimalServer( int number ) : tab_(number) {};
private:
FILETIME ft;
std::vector<Entry> tab_ = std::vector<Entry>(30);
};
Run Code Online (Sandbox Code Playgroud)
如果你需要它们连续并且访问底层指针,你当然可以为每个单独的值使用一个向量 variable.data()