2016-10-04 14 views
0

この型を定義したクラスmyClassは、この型を使用するmyTypeおよびstatic const std::mapです。メンバーをどのように初期化する必要がありますか?クラス内部の静的型の内部型

このような状況です。コンパイラは私に:multiple definition of MyClass::myMapと伝えます。しかし、実際には1つの定義しかありません。この初期化は(模式的に)正しいですか?

class myClass 
{ 
    struct myType 
    { 
    // ... 
    }; 
    static const std::map<int, myType> myMap; 
}; 

const std::map<int, myType> myClass::myMap = { 
    {1, {"hello myType", 99, "woops"}}, 
    {2, {"hello again", 66, "holla"}}, 
    {3, {"and bye", 33, "adios"}} 
}; 

提案問題のconstメンバーが静的ではありませんので、それは重複しません。

また、この質問:static constメンバーがint年代なのでInitializing private static members が質問に答えていません。

+1

あなたは '忘れてしまった;'構造体 –

+0

。それは本当に、 'のconst MyClassの::のstd ::マップ myMap'なく'のconstのstd ::マップのMyClass :: myMap'された後? 'myClass :: std :: map'がないので、最初のものはコンパイルすべきではありません。 – immibis

+0

私はそれらを両方とも修正しました。それは私のコードには存在しませんでした。 – dani

答えて

2

書かれているように、宣言と定義は同じファイル内にあります。これを行い、複数の場所にファイルを "#include"すると、複数の定義が作成されます。

通常、静的な値は、C++ソースファイルで個別に初期化され、クラスのヘッダーファイルでは初期化されません。

関連する問題