C++无法初始化静态数据成员
C++ cannot initialize static data member
我知道这已经被问了 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 次观看: 初始化私有静态成员
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 静态数据成员模板专用化的实例化点在哪里
- 调用在 HXX 文件中声明的静态数据成员
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- 何时需要定义类的静态数据成员 (un/-)
- 为什么静态数据成员不能在c++11中的类中初始化
- 静态数据成员的模板专用化
- 拒绝包含某些公共静态数据成员的类型
- GCC:在调试构建中优化的静态数据成员
- 类模板静态数据成员定义/声明/初始化
- C++ 中的静态数据成员
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 使用 lambda 函数初始化静态数据成员
- 引用静态数据成员
- 学习C++并在早期示例中遇到错误(在非静态数据成员之前需要构造函数)
- Windows 上的 Clang/LLVM 7 和 8 多次初始化内联静态数据成员(使用 link.exe 和 lld-
- 为什么不能使用"( )"为类的非静态数据成员提供默认值?
- 不带初始值设定项的 constexpr 静态数据成员