2016-08-04 40 views
-2

我是新來C++,我試圖使用靜態成員變量作爲翻譯程序中的「字典」。無法引用私有靜態成員變量:編譯器錯誤

我有兩個文件,alphabet.h,它看起來像這樣:

#ifndef ALPHABET_H 
#define ALPHABET_H 
#include <map> 
#include <vector> 

class Alphabet { 
    public: 
    typedef std::vector<std::string> letterType; 
    typedef std::map<std::string, letterType> alphabetType; 
    alphabetType getAlphabet(); 
    private: 
    static alphabetType m_alphabet; 
}; 

#endif 

而且alphabet.cpp,它看起來像這樣:

#include "alphabet.h" 

static Alphabet::alphabetType m_alphabet = {{"ὁ",{"o"}}}; 

Alphabet::alphabetType Alphabet::getAlphabet() { 
    return Alphabet::m_alphabet; 
} 

出於某種原因,當我試圖編譯,我從g ++得到一個錯誤。

在功能Alphabet::getAlphabet[abi:cxx11]()': alphabet.cpp:6: undefined reference to字母:: m_alphabet [ABI:cxx11]」 collect2:錯誤:LD返回1退出狀態

我將不勝感激任何見識到了什麼,我做錯了。

+0

這是一個私有變量。你的'm_alphabet = {{...}}'是在這個類之外,因此它不允許對這個私有變量做任何事情。 –

+0

@MarcB你必須在類之外實例化變量。 – NathanOliver

+0

順便說一句,這是一個鏈接器錯誤,而不是編譯器錯誤。 – Jarod42

回答

4
static Alphabet::alphabetType m_alphabet = {{"ὁ",{"o"}}}; 

應該

Alphabet::alphabetType Alphabet::m_alphabet = {{"ὁ",{"o"}}}; 

在這裏,你定義一個其它可變。

+0

值得注意的是,'static'使訪問模塊成爲本地。 –