0

请帮我创建一个带有数组的嵌套结构。如何修复此代码?

class CMain
{
    public:
        CMain();
        ~CMain();

    private:
        struct
        {
            CCheckSum() : BufferSize(500) {memset(Buffer, 0, BufferSize);}
            const int BufferSize;
            char Buffer[BufferSize];
        }SmallBuffer;
}

谢谢。

4

4 回答 4

2

即使您声明BufferSizeconst,在类范围内 this 也没有声明编译时常量,这是在 C++ 中声明数组大小所必需的,而是一个常量数据成员,一旦在构造函数中设置,在生命周期内就不能再更改实例(但每个实例仍然可以不同)。

两种解决方案:制作

  1. BufferSize static const在班级范围内,或
  2. (仅)const在命名空间范围内(包括全局范围)。
于 2009-07-28T13:42:03.147 回答
1

静态数组需要在编译时知道它们的长度,或者需要动态分配内存:

struct CCheckSum
{
    CCheckSum()
    : BufferSize(500),
      Buffer(new char[BufferSize])
    {
        memset(Buffer, 0, BufferSize);
    }
    ~CCheckSum() { delete[] Buffer; } // Note the use of delete[]!
    const int BufferSize;
    char* Buffer;
}SmallBuffer;

不过,您最好使用std::vector

struct CCheckSum
{
    CCheckSum() : Buffer(500, 0) {}
    std::vector<char> Buffer;  // A std::vector keeps
                               // track of its size enternally
}SmallBuffer;
于 2009-07-28T13:28:02.507 回答
0

没有与嵌套有关的问题。

数组具有恒定大小。要么使 BufferSize 为常量,要么使用 std::vector 代替 char[]。

于 2009-07-28T13:28:39.683 回答
0

数组大小不能在运行时更改。它应该在编译时知道。您可以将 std::vector 用于此用例。此外,在编写名为 CCheckSum 的构造函数之前,应给出结构名称。

struct CCheckSum
        {
            CCheckSum() : ....
于 2009-07-28T13:32:09.663 回答