• ベストアンサー

CStringを含むconst構造体

VC++6.0で typedef struct { int i; CString s; } StructTest; という構造体を作ったとして const StructTest m_STest = { 1, "TEST" }; とすると 『error C2552: 'm_STest' : 初期化子リストによる個別の識別子の初期化に誤りがあります。』 と出ます。 このような記述は出来ないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんばんは。  CStringはクラスですから、クラスを中に入れると{ }の初期化は使用出来なくなります。  初期化をさせたければコンストラクタを書き、( )で呼び出す必要があります。 struct StructTest { StructTest(int __i, const CString& __s) : i(__i), s(__s){ } int i; CString s; }; const StructTest m_STest(0, "TEST");

alna_sag
質問者

お礼

クラスと同じようにコンストラクタを使えば 良かったんですね。 ただ構造体にクラスを中に入れると{ }での初期化が 使用出来なくなるのは知りませんでした。 大変勉強になりました。 御回答有難うございました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

コンストラクタを定義してやればいいのかも // タグ名を追加 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" ); といった具合でどうでしょう

alna_sag
質問者

お礼

初期化子を使用しないコンストラクタでも初期化できることを 確認できました。 構造体ではなくちゃんとクラスを作ったほうがわかりやすいですね。 大変勉強になりました。 御回答有難うございました。

関連するQ&A