2015-10-28 51 views
1

我在類模板中有一個靜態數組。鏈接器抱怨一個未定義的符號,甚至在應用我在網絡上看到的提示之後,我無法弄清楚哪裏出了問題。在類模板中定義一個靜態數組

template<unsigned int N1, unsigned int N2> 
class Foo 
{ 
private: 
    static const int Size = N1 * N2; 

public: 
// stuff 

private: 
    static float mArray[Size]; 

} 

CPP

template <unsigned int N1, unsigned int N2> 
float Foo<N1, N2>::mArray[size] = {0}; 

鏈接器抱怨富< ...> :: MARRAY沒有被定義。當我將定義移動到標題時,我得到它來編譯(和鏈接),但我知道這是靜態的不好的做法。這裏最好的方法是什麼?

乾杯

+0

@πάνταῥεῖ我不太確定重複 - 沒有一個實際提到的靜態數據成員的答案,並且這個規則也不是很明顯。特別是像通常你會得到一個鏈接器錯誤將靜態數據成員定義在頭文件中。 – Angew

+1

@Angew那麼,模板類的'靜態'類成員對於這個愚人節中提到的規則和解決方案沒有任何特殊之處。 –

回答

5

與幾乎所有其他模板Y,A類模板的靜態數據成員的定義需要,換句話說用它—是在所有的翻譯單位訪問,把它的頭文件。編譯器+鏈接器需要使這個工作沒有多重定義錯誤。