2016-10-04 115 views
0

我有一個類myClass,它有一個類型定義,myType,和static const std::map使用這種類型。我如何初始化成員?靜態,私人會員,內部類型

情況就是這樣。編譯器告訴我:multiple definition of MyClass::myMap。但實際上只有一個定義。這個初始化(示意圖)是否正確?

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成員不是靜態的。

而且這個問題:Initializing private static members 因爲static const成員int的不回答這個問題。

+1

你忘了';'後結構 –

+0

是不是真的'常量MyClass的::性病::地圖 myMap'而不是'常量的std ::地圖 MyClass的:: myMap'?第一個不應該編譯,因爲沒有'myClass :: std :: map'。 – immibis

+0

我修正了它們,它不存在於我的代碼中,因此不是問題。 – dani

回答

2

正如所寫的,聲明和定義都在同一個文件中。如果您這樣做,並且您在多個位置「#include」該文件,則會創建多個定義。

靜態值通常在C++源文件中單獨初始化,而不是在包含類的頭文件中初始化。