инициализация статической карты

У меня есть следующий код: у меня есть следующий код:

//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;//methods
};

//MyClass.cpp
//Init opMap_
MyClass::opMap_["x"] = 1; //compilation error

Как я могу в любом случае инициализировать (статический) opMap_?

18

Решение

Если вы используете C ++ 11, вы можете использовать списки инициализаторов:

//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
};

//MyClass.cpp
MyClass::OpMap MyClass::opMap_ = {
{ "x", 1 }
};

Если у вас нет доступа к компилятору, который поддерживает стандарт C ++ 11, вы можете сделать следующее:

//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
private:
static OpMap init_map() {
OpMap some_map;
some_map["x"] = 1;
return some_map;
}
};

//MyClass.cpp
MyClass::OpMap MyClass::opMap_ = init_map();
30

Другие решения

Поскольку вы используете VS2010, вам необходимо инициализировать статический член в MyClass.cpp перед любыми другими определениями функций-членов. вызов MyClass::InitMap() если вы хотите инициализировать opMap_,

MyClass.h

class MyClass
{
public:
MyClass(void);
~MyClass(void);
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
static void InitMap();
};

MyClass.cpp

std::map<std::string, int> MyClass::opMap_;
MyClass::MyClass(void)
{
InitMap(); // just sample if you want to initialize opMap_ inside MyClass constructor
}

void InitMap()
{
MyClass::opMap_["x"] = 1;
}
4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector