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

解決


ぺぺ  2005-11-01 13:40:04  No: 59437  IP: 192.*.*.*

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

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

編集 削除
tetrapod  2005-11-01 14:00:08  No: 59438  IP: 192.*.*.*

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

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

編集 削除
ぺぺ  2005-11-01 14:07:51  No: 59439  IP: 192.*.*.*

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

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

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

編集 削除
PATIO  2005-11-01 14:11:02  No: 59440  IP: 192.*.*.*

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

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

編集 削除
Blue  2005-11-01 14:11:49  No: 59441  IP: 192.*.*.*

> 早速、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 14:12:39  No: 59442  IP: 192.*.*.*

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

編集 削除
ぺぺ  2005-11-01 14:27:47  No: 59443  IP: 192.*.*.*

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

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

編集 削除
ぺぺ  2005-11-01 14:28:31  No: 59444  IP: 192.*.*.*

解決チェック済み

編集 削除