Я знаю, что это было задано 10000 раз, однако у меня все еще возникают проблемы с его компиляцией. Обратите внимание на статическую карту-член.C++ не может инициализировать элемент статических данных
В функции getMap() я получаю неопределенную ошибку ссылки на элемент данных карты. Я попытался переместить эту функцию в файл cpp и объявить «карту» в этом файле. Однако затем я получаю противоречивую ошибку определения.
Может ли кто-нибудь объяснить мне, что происходит? Благодаря
Base.h
template<typename T> Base * createT() { return new T; }
typedef std::map<std::string, Base*(*)()> map_type;
class BaseFactory
{
static Base* createInstance(std::string const& s)
{
map_type::iterator it = getMap()->find(s);
if (it == getMap()->end())
return 0;
return it->second();
}
protected:
static map_type *getMap()
{
if (!map)
{
map = new map_type;
}
return map;
}
private:
static map_type * map;
static Base* createInstance(std::string const* s);
public:
BaseFactory();
~BaseFactory();
};
Итак, в 10001-й раз вы пропустили сообщение об ошибке плюс фактическую строку кода, указывающую на ошибку – P0W
Спасибо, ребята, очень полезно. – tier1
Вы неправильно поняли совет, который вам дали. Ответ заключается не в том, чтобы переместить функцию в файл cpp. Решение состоит в том, чтобы * добавить новый код * в файл cpp. Этот новый код определяет статический член. Как такая простая вещь может быть настолько сложной? – john