如何糾正它,所以我可以在下面的例子顯示由靜態初始化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;
}
如何糾正它,所以我可以在下面的例子顯示由靜態初始化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;
(注意,因爲靜態成員是不常量,你不能提供的類定義內的初始化,所以你需要從類定義聲明刪除= 0
。還要注意的是,你可以,如果value == 0
跳過= value
在初始化,靜態初始化將設置A::a
0任何其他初始化之前)
+1在這個特殊情況下使其在內部const和初始化它將工作。 –
@LuchianGrigore:完全改變語義...... –