如何在C++中为类内部分配可修改的数组大小

use*_*644 0 c++ arrays class

我需要将类中定义的数组的大小作为依赖于情境的值.为了澄清这一点,以下具有固定数组大小的代码显示没有错误

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)

问题是:

  1. 如何在CreateTag函数中定义idG向量数组.

Entry.idG [c]显示错误.

  1. createTag函数循环中的'NumberOfPoints'也等于30.如何在main函数中赋值.
  2. 如何制作另一个矢量数组ID.我可以在同一个struct条目中定义它并在createTag中调用它.

gal*_*p1n 9

我们在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()