C ++无法初始化静态数据成员

时间:2013-10-13 19:52:26

标签: c++ static initialization

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

};

1 个答案:

答案 0 :(得分:0)

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

private:
    static map_type * map;

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

map_type* BaseFactory::map = NULL;

本文也可能对您有所帮助:Static data members (C++ only)
+这个问题,现在几乎有10万次观看:Initializing private static members