2017-08-28 13 views
0

私はグローバルスコープ/名前空間のクラスの外で静的なクラスメンバを定義しなければならないことを知っている。そうでなければ、コンパイラはシンボルの欠落を訴えるだろう。そこで、以下では、私は、内部構造体を定義するために管理することはできません。内部構造体静的オブジェクトはどこで定義しますか?私はできないようだ

struct MyStruct 
{ 
    struct MyInnerStruct 
    { 
     int notimportant1, notimportant2; 
    }; 
    static MyInnerStruct object1; 
}; 

int main(void) 
{ 
    MyStruct foo; 
    foo.object1.notimportant1 = 5; // Unresolved external symbol, I expected this to happen 

    return 0; 
} 

MyInnerStruct MyStruct::object1; // Typical definition of a static member 
            // MyInnerStruct is underlined, saying it's undefined 

を私もそれ以上の前方宣言を試してみましたが、それは再定義について何かを言いました。実際に私はすべてを再定義しなければならないことも疑問に思っていました

答えて

5

このような記号がないので、MyInnerStructはグローバルネームスペースにあります。それはMyStructです。私。あなたはする必要があります

MyStruct::MyInnerStruct MyStruct::object1; 

これは、クラス外でメンバー関数を定義するのと同じように機能します。

+1

追加するだけで、「未解決の外部シンボル」のように見えますが、これとは関係がなく、別の問題です –

関連する問題