-6

我知道这已经被问了 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();

};
4

1 回答 1

0

您的类定义中的以下声明是不够的:

private:
    static map_type * map;

在一个 .cpp 文件中,您还必须添加:

map_type* BaseFactory::map = NULL;

这篇文章也可能对您有所帮助:静态数据成员(仅限 C++)
+ 这个问题,目前已获得近 10 万次浏览:初始化私有静态成员

于 2013-10-13T19:54:58.233 回答