我知道这已经被问了10000次,但是,我仍然有问题要编译。注意静态成员'map'。
在'getMap()'函数中,我收到一个未定义的引用错误,引用了map数据成员。 我试图将该函数移动到cpp文件并在该文件中声明'map'。但是,我接收到一个相互矛盾的定义错误。
有人可以向我解释发生了什么事吗?感谢
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();
};
答案 0 :(得分:0)
您班级定义中的以下声明是不够的:
private:
static map_type * map;
在一个.cpp文件中,您还必须添加:
map_type* BaseFactory::map = NULL;
本文也可能对您有所帮助:Static data members (C++ only)
+这个问题,现在几乎有10万次观看:Initializing private static members