如何纠正它,以便我可以通过
显示静态intcout<<A::a<<endl;
就像下面的例子一样?
#include <iostream>
using namespace std;
class A{
public:
static int a = 0;
};
int main()
{
cout << A::a << endl;
return 0;
}
答案 0 :(得分:5)
或者:
class A{
public:
static const int a = 0;
};
(const整数类型可以在类定义中初始化)
或
class A{
public:
static int a;
};
int A::a = 0;
答案 1 :(得分:5)
在类定义中,静态成员仅声明而未定义。默认情况下,只有 definitions 具有初始化,但对于整数类型的静态常量,声明可以进行初始化。
程序中的问题是使用静态成员(std::cout << A::a
odr-use 用于非const静态成员属性),但是没有定义。您需要通过添加以下内容在程序的单个翻译单元中定义变量:
int A::a = value;
(注意,因为静态成员不是 const,所以你不能在类定义中提供初始化器,所以你需要从类定义中的声明中删除= 0
。请注意,如果= value
,您可以跳过初始化中的value == 0
,因为静态初始化会在任何其他初始化之前将A::a
设置为0