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

How to set the value of a class static data member from a member function?

本文关键字:静态 数据成员 设置 成员 函数      更新时间:2023-10-16

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

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的引用

您需要

为类外的default_value;提供一个定义,因为它是 odr 使用的

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;

在类内部,你只是声明它,而不是定义它。当您实际尝试分配给链接器时,这会导致链接器错误。