c++ - 定义静态成员
问题描述
考虑以下代码:
#include <iostream >
using namespace std;
class A
{
private:
int x;
public:
A(int _x) { x = _x; }
int get() { return x; }
};
class B
{
static A a;
public:
static int get()
{ return a.get(); }
};
A B::a(0);
int main(void)
{
B b;
cout << b.get();
return 0;
}
我的书说:
如果我们不使用这行代码A B::a(0)
,则会出现编译器错误,因为 B 中没有定义静态成员 a。要修复错误,我们需要显式定义a
.
但是,我想将对象初始化a
为,static A a(0);
但它给了我一个编译器错误。有人可以解释为什么我不能以我描述的方式初始化对象 a,以及为什么有必要像他们在书中给出的那样初始化它。
解决方案
如果要定义a
内联,则需要inline
它,这可以从 C++17 开始:
class B {
inline static A a{0}; // or inline static A a = 0;
public:
static int get() { return a.get(); }
};
推荐阅读
- python - 将匹配值从 2 个数据帧(1 个数据帧在单元格中包含单个值,1 个在单元格中包含列表)返回到 1 个数据帧中
- python - 使用密钥请求进行身份验证
- c - Contiki 中的节点数
- r - R 条件距离测量
- php - 转义表情符号,然后使用 php 读取它们
- php - PHP 套接字编程。同一个实例需要支持300多个连接
- mysql-python - 插入mysql时如何在python条件满足时更新束值
- c# - C# JsonConverter 有时会丢失对原始实例的引用
- java - 有没有办法通过spring-boot访问通过KSQL(kafka)创建的表?
- java - 有没有办法在不制定所有规则的情况下到达 AST 的末尾?