我知道这已经被问了 10000 次,但是,我仍然无法编译它。注意静态成员'map'。
在“getMap()”函数中,我收到一个引用地图数据成员的未定义引用错误。 我试图将该函数移动到一个 cpp 文件并在该文件中声明“地图”。但是,然后我收到一个冲突的定义错误。
有人可以向我解释发生了什么吗?谢谢
基数.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();
};