指向静态成员变量的指针
Pointer to static member variable
可能重复:
C++:对静态类成员的未定义引用
以下C++代码编译得很好(使用g++ -c
),但它没有链接,并给出错误:undefined reference to
Abc::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;
}
相关文章:
- 指针变量在 cout 函数中不起作用
- 如何将指针变量作为引用参数传递?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 我试图了解在异或操作后指针变量正在更改
- 调用带有指针对象错误的指针变量
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- 非指针变量和类成员上的新放置
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- 全局外部指针变量在 DLL 中不可见
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- C++ 中指针变量的内存释放
- 使用指针变量打印特定的数组变量
- 如何使用构造函数初始化内存地址(指针变量)?
- 如何释放为指针变量本身提供的内存?
- 如果地址已知,如何获取指针变量的名称
- 如何处理参数中的基类和指针变量
- 指针变量 在数组中定位零
- 隐式指针变量,在自动定义中具有另一个指针变量
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- 错误 C4703 可能未初始化的局部指针变量'y'使用