Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中类成员的“未定义”引用_C++_Oop_Gcc_Linker - Fatal编程技术网

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;