クラス内の配列初期化について

解決


ぺぺ  2005-11-01 22:40:04  No: 59437

C++の初心者です。以下のとおり記載すると、
int b[]={1,2,3};でコンパイルエラーが発生します。何故でしょうか?
どなたかご教授ください。

class a {
  private:
    int b[]={1,2,3};        // コンパイルエラー!!
  public:
    a();
    ~a();
};


tetrapod  2005-11-01 23:00:08  No: 59438

何故と問われるなら答えは「できないから」です。
class a { int i=1; }; もできないでしょ。
意味がまるっきり変わってしまいますが、どうしてもクラス定義内で初期化したいなら
static const int b[]={1,2,3}; とか。

非 static な配列はデフォルト初期化しかできないので、自由に値を与えたいなら
コンストラクタの {} 内で代入してやるしかないです。


ぺぺ  2005-11-01 23:07:51  No: 59439

tetrapodさん、ご回答ありがとうございます。m(_ _)m

早速、static const int b[]={1,2,3}; でコンパイルしてみました。
が、構文エラー : '{'でした。

クラス内で中括弧を使用することはできないってことですかね。


PATIO  2005-11-01 23:11:02  No: 59440

そのコンパイルエラーの説明に書いてあるのではないかと思います。
HELPで調べてみてはどうでしょうか。

class宣言の部分は型の宣言であって実体が無いからではないですからねぇ。
staticの場合は静的に実体が確保されるから初期化が出来るわけで、
staticでなければ、a  instance;と言うように実体を作成しないと
instance.bも存在し得ないからではないかなぁ。


Blue  2005-11-01 23:11:49  No: 59441

> 早速、static const int b[]={1,2,3}; でコンパイルしてみました。
参考にどうぞ。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200510/05100036.txt


PATIO  2005-11-01 23:12:39  No: 59442

あーと、C++に限らずですが、コンパイラによって標準への準拠率が違いますので
使っている開発環境はきちんと明示してください。
環境が変われば大丈夫なこともありますので。


ぺぺ  2005-11-01 23:27:47  No: 59443

PATIOさん、Blueさん、早速のご回答ありがとうございます。
コンパイラはVC++6.0とRedhad Linux Enterprise AS 4.0です。

検討した結果、 コンストラクタで初期化する事にしました。
どうも、ありがとうございました。m(_ _)m


ぺぺ  2005-11-01 23:28:31  No: 59444

解決チェック済み


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加