static int初始化

时间:2012-10-12 14:57:15

标签: c++ static

如何纠正它,以便我可以通过

显示静态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;
}

2 个答案:

答案 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