C++中类成员的“未定义”引用
链接此代码时:C++中类成员的“未定义”引用,c++,oop,gcc,linker,C++,Oop,Gcc,Linker,链接此代码时: #include <map> using std::map; #include <string> using std::string; class C { public: static void dump() { for (const auto& e : data) { string(e.first); } } private: static map<string
#include <map>
using std::map;
#include <string>
using std::string;
class C {
public:
static void dump() {
for (const auto& e : data) {
string(e.first);
}
}
private:
static map<string,map<string,string>> data;
};
int main() {
C::dump();
}
。。。来自g++GCC4.9.1。
我做错了什么吗?您声明了C::data,但没有定义它。在类外添加定义:
map<string,map<string,string>> C::data;
在一个包含多个源文件的大型程序中,必须只包含一个源文件才能满足一个定义规则;虽然包括数据声明在内的类定义可能会放在标题中,以便在需要时随时可用。我们确实应该为这个问题找到一个不太容易混淆的重复项,或者将其转换为更通用的形状,但它仍然是该主题中投票率最高的一个。这里有一个更全面的副本:您这边关于作为一个副本关闭的一些注释,以及找到一个更合适的副本?我必须定义一个非函数类成员?斯雷@πάνταῥεῖ: 也许是这个@亚历山大:是的,说真的。这就是唯一定义规则所要求的。@MikeSeymour是的,它更抽象/通用,但缺少投票权:P。。。
map<string,map<string,string>> C::data;