指向静态成员变量的指针

Pointer to static member variable

本文关键字:指针 变量 静态成员      更新时间:2023-10-16

可能重复:
C++:对静态类成员的未定义引用

以下C++代码编译得很好(使用g++ -c),但它没有链接,并给出错误:undefined reference toAbc::X'`

#include <iostream>
using namespace std;
class Abc {
public:
    const static int X = 99;
};
int main()
{
    Abc a1;
    cout << &(Abc::X) << endl;
}

我想知道为什么不允许这样做?

您需要实际定义静态成员,而不仅仅是声明。。。

main():之前添加此行

const int Abc::X = 99;

从C++17开始,您还可以执行内联静态,在这种情况下,不需要.cpp文件中的上述附加代码行:

class Abc {
public:
    inline const static int X = 99; // <-- "inline"
};

如果静态成员的使用方式需要一个左值(即需要它有一个地址),那么它必须有一个定义。请参阅GCC wiki上的解释,其中包括对该标准的引用以及如何修复它。

如果您不喜欢考虑转换单元、静态初始化顺序之类的问题,只需将静态常量更改为方法即可。

#include <iostream>
using namespace std;
class Abc {
public:
    inline static const int& X(){ 
      static int x=99;
      return x; 
    }
};
int main()
{
//    Abc a1;
    cout << &(Abc::X()) << endl;
}