C++中对"类成员"的"未定义"引用

Ale*_*mov 0 c++ oop linker gcc

在链接此代码时:

#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();
}
Run Code Online (Sandbox Code Playgroud)

...我收到此错误:

/tmp/cc4W2iNa.o: In function `C::dump()':
test.cpp:(.text._ZN1C4dumpEv[_ZN1C4dumpEv]+0x9): undefined reference to `C::data'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

......来自g ++(GCC)4.9.1.我做错了吗?

Mik*_*our 7

你已经宣布C::data,但没有定义它.在课外添加定义:

map<string,map<string,string>> C::data;
Run Code Online (Sandbox Code Playgroud)

在一个较大的程序中,有多个源文件,这必须只在一个源文件中才能满足一个定义规则; 而类定义(包括声明data)可能会在标题中随时可用.