- ベストアンサー
CStringを含むconst構造体
VC++6.0で typedef struct { int i; CString s; } StructTest; という構造体を作ったとして const StructTest m_STest = { 1, "TEST" }; とすると 『error C2552: 'm_STest' : 初期化子リストによる個別の識別子の初期化に誤りがあります。』 と出ます。 このような記述は出来ないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 CStringはクラスですから、クラスを中に入れると{ }の初期化は使用出来なくなります。 初期化をさせたければコンストラクタを書き、( )で呼び出す必要があります。 struct StructTest { StructTest(int __i, const CString& __s) : i(__i), s(__s){ } int i; CString s; }; const StructTest m_STest(0, "TEST");
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
コンストラクタを定義してやればいいのかも // タグ名を追加 typedef struct _st { int i; CString s; //コンストラクタを定義 struct _st( int paramN, CString paramS ) { n = paramN; s = paramS; } } StructTest; といった具合に定義して const StructTest m_STest = StructTest( 1, "TEST" ); といった具合でどうでしょう
お礼
初期化子を使用しないコンストラクタでも初期化できることを 確認できました。 構造体ではなくちゃんとクラスを作ったほうがわかりやすいですね。 大変勉強になりました。 御回答有難うございました。
お礼
クラスと同じようにコンストラクタを使えば 良かったんですね。 ただ構造体にクラスを中に入れると{ }での初期化が 使用出来なくなるのは知りませんでした。 大変勉強になりました。 御回答有難うございました。