如何从成员函数设置类静态数据成员的值?

时间:2016-04-25 19:14:29

标签: c++ static

我们的想法是使用静态成员函数来更新同一类中的静态数据成员的值

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

的未定义引用

1 个答案:

答案 0 :(得分: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;

在课堂内你只是声明它,但没有定义它。当您实际尝试分配链接器时,这会导致链接器错误。