2014-10-06 85 views
0

雖然聯的代碼:「未定義」 參照++類成員用C

#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(); 
} 

...我得到這個錯誤:

/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 

...從克++(GCC)4.9.1 。 我做錯了什麼?

+1

我們確實應該爲這個問題找到一個不太令人困惑的副本(或者將其打成更通用的形狀),但它仍然是被選中的主題之一。 – 2014-10-06 22:07:49

+0

更全面的重複在這裏:http://stackoverflow.com/questions/7092765 – 2014-10-06 22:17:53

回答

7

您聲明瞭C::data,但沒有定義它。添加一個定義在類的外部:

map<string,map<string,string>> C::data; 

在一個更大的計劃,其中超過一個源文件,這必須在短短的一個源文件去滿足一個定義規則;而類別定義(包括data的聲明)可能會在標題中隨時可用。

+0

從你身邊的一些筆記關於作爲一個愚蠢的關閉,並找到一個更合適的? – 2014-10-06 22:08:57

+0

我必須定義一個非函數類成員? Srsly? – 2014-10-06 22:12:58

+0

@πάνταῥεῖ:這一個,也許? http://stackoverflow.com/questions/7092765 – 2014-10-06 22:13:01