質問
ください、私を入れ子構造と配列になります。どうすればいいコードについて教えてください。
class CMain
{
public:
CMain();
~CMain();
private:
struct
{
CCheckSum() : BufferSize(500) {memset(Buffer, 0, BufferSize);}
const int BufferSize;
char Buffer[BufferSize];
}SmallBuffer;
}
感謝。
解決
静的配列はコンパイル時にその長さを知っている必要があります。または、メモリを動的に割り当てる必要があります:
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 ::ベクトルを使用してオフにおそらく方がよいでしょう。
struct CCheckSum
{
CCheckSum() : Buffer(500, 0) {}
std::vector<char> Buffer; // A std::vector keeps
// track of its size enternally
}SmallBuffer;
他のヒント
ていても、宣言された BufferSize
として const
, は、クラスの適用範囲こないを申告することがコンパイル時間を一定に必要な宣言する配列のサイズC++でも一定のデータの委員は、一度設定のコンストラクタの変更はできませんなの寿命のインスタンスができるものごとに異なることします。
二つのソリューション作
BufferSize
static const
クラスの範囲、または- (だけ)
const
で名前空間範囲を含むグローバル範囲).
の入れ子に関連した問題はありません。
アレイは、一定の大きさを持っています。いずれかたBufferSize定数を作るまたはchar []の代わりのstd ::ベクトルを使用します。
配列のサイズは、実行時に変更することはできません。これは、コンパイル時、それ自体で知られている必要があります。 あなたは、このユースケースのためのstd ::ベクトルを使用することができます。 また、構造体名は、名前CCheckSumでコンストラクタを書き込む前に与えられるべきである。
struct CCheckSum
{
CCheckSum() : ....
所属していません StackOverflow