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

C++ cannot initialize static data member

本文关键字:静态 数据成员 初始化 C++      更新时间:2023-10-16

我知道这已经被问了 10000 次,但是,我仍然在编译它时遇到问题。 请注意静态成员"映射"。

在"getMap()"函数中,我收到一个未定义的引用错误,引用了映射数据成员。 我试图将该函数移动到 cpp 文件并在该文件中声明"map"。 但是,我随后收到冲突的定义错误。

有人可以向我解释发生了什么吗? 谢谢

基数.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();
};

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

private:
    static map_type * map;

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

map_type* BaseFactory::map = NULL;

本文也可能对您有所帮助: 静态数据成员(仅限C++)
+ 这个问题,现在已经有近 100k 次观看: 初始化私有静态成员