静态 int 初始化

static int initialization

本文关键字:初始化 int 静态      更新时间:2023-10-16

如何更正它,以便我可以通过以下方式显示静态 int

cout<<A::a<<endl;

就像下面的例子一样?

#include <iostream>
using namespace std;
class A{
    public:
        static int a = 0;
};
int main()
{
    cout << A::a << endl;
    return 0;
}

在类定义中,静态成员仅声明而不定义。默认情况下,只有定义具有初始化功能,但对于整型的静态常量,声明可以进行初始化。

程序中的问题是使用了静态成员(std::cout << A::a是非常量静态成员属性的 odr-use),但您没有定义。您需要通过添加以下内容在程序的单个翻译单元中定义变量:

int A::a = value;

(请注意,由于静态成员不是 const ,因此无法在类定义中提供初始值设定项,因此需要从类定义中的声明中删除= 0。另请注意,如果value == 0,则可以跳过初始化中的= value,因为静态初始化将在任何其他初始化之前A::a设置为 0)

要么:

class A{
    public:
        static const int a = 0;
};

(const 整数类型可以在类定义中初始化)

class A{
    public:
        static int a;
};
int A::a = 0;