アプリ版:「スタンプのみでお礼する」機能のリリースについて

VisualStudio2015を使用しています。
クラスのヘッダ内で以下のように配列を初期化しようとすると、「エラー:不完全な型は使用できません」となりコンパイルできません。

class MyClass
{
public:
int a[] = { 1,2,3 };
int b[] = { 1,2,3 };
};

そこで a の要素数を指定すると、今度はコンパイル出来ます。

class MyClass
{
public:
int a[3] = { 1,2,3 };
int b[] = { 1,2,3 };
};

要素数を指定すればいいだけなのですが、この理由が分からなくてモヤモヤしています。
クラスのメンバ配列で要素数を省略できるのは一つだけという制限でもあるのでしょうか?

A 回答 (1件)

ちょろっと仕様を確認したけど


int a[] = { 1,2,3 };
としたときの a が「不完全型」かどうか判断できなかった (苦笑). int a[] までは不完全型だから, それではじかれる可能性がある (static でないデータメンバーは完全型である必要があるので). ちなみに手元の G++ 5.2.0 ではどっちもアウト.

jひょっとすると VC++ の拡張機能で「最後のメンバーは『大きさを陽に与えない配列』でもいい」というのがあったりするかもしれん. これが発動するなら
class MyClass
{
public:
int a[] = { 1,2,3 };
int b = 1;
};
はダメでも
class MyClass
{
public:
int b = 1;
int a[] = { 1,2,3 };
};
は OK だったりする.
    • good
    • 0
この回答へのお礼

色々試してみましたが、確かに最後のメンバーだけは要素数を省略できるようでした。
他のコンパイラではアウトなようですし、要素数の省略は使わないようにしようと思います。
回答ありがとうございました。

お礼日時:2016/03/31 06:40

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