const 構造体である / const フィールドを持つメンバーを初期化するクラスのコンストラクターをどのように作成すればよいですか?
次の例では、構造体 B 内にコンストラクターを定義し、その const フィールドを初期化するために正常に動作します。
しかし、クラス A 内で構造体 C の const フィールドを初期化するために同じ手法を使用しようとすると、うまくいきません。誰かが私を助けて、私のクラス A を書き直して、それが機能し始めることはできますか?
#include <iostream>
class A
{
public:
struct C
{
C (const int _x) : x (_x) {}
const int x;
};
C c (3);
};
int main (int argc, char *argv[])
{
struct B
{
B (const int _x) : x (_x) {}
const int x;
};
B b (2);
std::cout << b.x << std::endl;
A a;
std::cout << a.c.x << std::endl;
return 0;
}
PS
私はいくつかの検索を行いましたが、C++ 11 をサポートしていないか、boost ライブラリを使用したい場合を除き、初期化リスト内で const 構造体を初期化するヘルパー関数を定義する必要があることを理解しています ( C++ 定数構造体メンバーの初期化) が、同様の構造体を定義する必要があるのはおかしいようですが、非 const フィールドを使用して構造体を const フィールドで初期化しますね。
私が見つけた別のことは、構造体 C のコンストラクターではなく、クラス A のコンストラクターで const メンバーを初期化する必要があることを示しています ( C++ コンパイル時エラー: 数値定数の前に識別子が必要です)。新しい構造体を追加するたびにクラス コンストラクターを書き直す必要があるのはなぜですか?
私の混乱を明確にする可能性のあるコメントに感謝します。