プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (2件)

 こんばんは。



 CStringはクラスですから、クラスを中に入れると{ }の初期化は使用出来なくなります。
 初期化をさせたければコンストラクタを書き、( )で呼び出す必要があります。

struct StructTest
{
StructTest(int __i, const CString& __s) : i(__i), s(__s){}
int i;
CString s;
};

const StructTest m_STest(0, "TEST");
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/04/14 21:56

コンストラクタを定義してやればいいのかも



// タグ名を追加
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" );
といった具合でどうでしょう
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/04/14 22:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!