dポイントプレゼントキャンペーン実施中!

同じ内容の質問をされた方がおり、参考にしてコードを作ったのですが、エラーを吐くため以下教えてください。

<aaa.h>
class bbb{
public:
bbb(); //初期化用関数(コンストラクタ)
static const int ccc[8]; //定義
};


<aaa,cpp>
bbb::bbb(){
const int ccc[8] = {1,2,3,4,5,6,7,8}; //宣言
}

以上のようにコードを書くと、
「外部シンボル"なんちゃら"は未解決です。」
というエラーが出ます。
これは宣言された変数に対して定義がない場合に出るエラーだということはわかりました。
ちなみにconst int型ではなくint型で宣言すると問題なくビルドが通りました。

ヘッダには変数の宣言だけをし、cppファイルでは定義をしている。ここができていればconstが付いていても問題ないと思うのですが、どこが間違っているのでしょうか。

A 回答 (1件)

bbb::bbb(){


const int ccc[8] = {1,2,3,4,5,6,7,8}; //宣言
}

これって、「bbb::bbbメソッド内のローカル変数cccの宣言」です。
bbb::cccの宣言になっていません。


staticなフィールドの定義なら、メソッドと同じレベルに書く必要があります。

bbb::bbb(){
// コンストラクタの内容
}
const int bbb::ccc[8] = {1,2,3,4,5,6,7,8};


> ちなみにconst int型ではなくint型で宣言すると問題なくビルドが通りました。

こちらは再現しません。
手許のclang++では、constの有無では変化しません。

もしかして、 static const int → int (staticもはずしている) ではないですか?
    • good
    • 1
この回答へのお礼

ありがとう

kmeeさん
即時のご回答ありがとうございました。
言われたとおりにすると見事ビルドが通りました。

宣言のところに関してはstaticも外していたようです。

お礼日時:2016/03/12 19:35

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