带数组的嵌套结构

时间:2009-07-28 13:26:02

标签: c++ initialization nested-class

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

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

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

感谢。

4 个答案:

答案 0 :(得分:2)

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

两种解决方案: 使

    在班级范围内
  1. BufferSize static const,或
  2. (仅)const在命名空间范围内(包括全局范围)。

答案 1 :(得分: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;

答案 2 :(得分:0)

没有与嵌套相关的问题。

数组具有恒定的大小。要么使BufferSize不变,要么使用std :: vector而不是char []。

答案 3 :(得分:0)

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

struct CCheckSum
        {
            CCheckSum() : ....