2016-04-25 95 views
1

的想法是使用靜態成員函數在同一個類如何從成員函數中設置類靜態數據成員的值?

template<typename K,typename U> 
class Map{ 
private: 
    static pair<K,U> default_value; 
public: 
    static void set_default(K& k,U& u){default_value=make_pair(k,u);} 
}; 

int main(){ 
    int a{8}; 
    int b{9}; 
    Map<int,int>::set_default(a,b); 
    return 0; 
} 

在這裏,我得到一個錯誤更新靜態數據成員的值:未定義參考Map<int,int>::default_value

回答

3

您需要提供定義你的default_value;類外,因爲它是odr-used

template<typename K,typename U> 
class Map{ 
    static pair<K,U> default_value; 
    // ... 
}; 

template <typename K, typename U> 
pair<K,U> Map<K, U>::default_value; 

裏面你只是聲明它的類,但不能定義它。當您實際嘗試分配給它時,會導致鏈接器錯誤。

相關問題