2016-04-25 136 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; 

里面你只是声明它的类,但不能定义它。当您实际尝试分配给它时,会导致链接器错误。