2016-10-04 114 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++源文件中单独初始化,而不是在包含类的头文件中初始化。