C++の初心者です。以下のとおり記載すると、
int b[]={1,2,3};でコンパイルエラーが発生します。何故でしょうか?
どなたかご教授ください。
class a {
private:
int b[]={1,2,3}; // コンパイルエラー!!
public:
a();
~a();
};
何故と問われるなら答えは「できないから」です。
class a { int i=1; }; もできないでしょ。
意味がまるっきり変わってしまいますが、どうしてもクラス定義内で初期化したいなら
static const int b[]={1,2,3}; とか。
非 static な配列はデフォルト初期化しかできないので、自由に値を与えたいなら
コンストラクタの {} 内で代入してやるしかないです。
tetrapodさん、ご回答ありがとうございます。m(_ _)m
早速、static const int b[]={1,2,3}; でコンパイルしてみました。
が、構文エラー : '{'でした。
クラス内で中括弧を使用することはできないってことですかね。
そのコンパイルエラーの説明に書いてあるのではないかと思います。
HELPで調べてみてはどうでしょうか。
class宣言の部分は型の宣言であって実体が無いからではないですからねぇ。
staticの場合は静的に実体が確保されるから初期化が出来るわけで、
staticでなければ、a instance;と言うように実体を作成しないと
instance.bも存在し得ないからではないかなぁ。
> 早速、static const int b[]={1,2,3}; でコンパイルしてみました。
参考にどうぞ。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200510/05100036.txt
あーと、C++に限らずですが、コンパイラによって標準への準拠率が違いますので
使っている開発環境はきちんと明示してください。
環境が変われば大丈夫なこともありますので。
PATIOさん、Blueさん、早速のご回答ありがとうございます。
コンパイラはVC++6.0とRedhad Linux Enterprise AS 4.0です。
検討した結果、 コンストラクタで初期化する事にしました。
どうも、ありがとうございました。m(_ _)m
解決チェック済み
ツイート | ![]() |