请帮我创建一个带数组的嵌套结构。我该如何修复此代码?
class CMain
{
public:
CMain();
~CMain();
private:
struct
{
CCheckSum() : BufferSize(500) {memset(Buffer, 0, BufferSize);}
const int BufferSize;
char Buffer[BufferSize];
}SmallBuffer;
}
感谢。
答案 0 :(得分:2)
即使您将BufferSize
声明为const
,但在类范围内,这并未声明编译时常量,这是在C ++中声明数组大小所必需的,而是一个常量数据成员,一旦在构造函数中设置,就不能再在实例的生命周期内更改(但对于每个实例仍然可以不同)。
两种解决方案: 使
BufferSize
static const
,或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() : ....