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

标签 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 的 undefined reference

最佳答案

您需要在类外为您的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;

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

关于c++ - 如何从成员函数中设置类静态数据成员的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849200/

相关文章:

c++ - GLES 和无透视

c++ - 在 MSVC 编译器下使用最大成员初始化 union

c++ - 迭代器的概念问题

PHP: "Call to undefined method"... 但方法已定义?

C++ STL 库 vector 二维数组不越界

c++ - 了解 OpenGL 中的绑定(bind)/激活纹理性能损失

在另一个实例中覆盖实例的 Java 静态变量?

c++ - 头文件中定义的 const static 变量在不同的翻译单元中具有相同的地址

android - 我可以通过在 Android Activity 中声明适当的成员 "static"来获得一些效率吗

c - 允许静态声明后跟非静态声明的基本原理,但反之则不然