【发布时间】:2021-09-11 06:24:00
【问题描述】:
考虑以下代码:
#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,以及为什么有必要像他们在书中给出的那样初始化它。
【问题讨论】:
-
您是将
static A a(0);放在类定义的内部还是外部?为什么它可能是错误的变化取决于位置。 -
旁注:你可以在
static成员中逃脱的东西是一个移动的目标。 C++ 标准的每个新版本都会放宽一些限制并添加更多功能。 -
@user4581301 我试图将静态 A a(0) 放在类定义中。你能告诉我为什么把它放在这里是错误的吗?