C++などの内部静的メンバー
1331 ワード
クラス静的メンバーはstaticキーワードで宣言され、クラス属性に属し、すべてのオブジェクトが共有されます.これを変更すると、静的メンバーはクラス内またはクラス外で初期化する必要があります.ここでは、静的クラスタイプメンバーが初期化されていない場合に発生する結果と、どのように修正するかを説明します.
コード:
結果はコンパイルエラー:
1>練習13.44_staticクラスメンバー_test.obj:error LNK 2001:解析不能外部符号「public:static class X Y::x」(?x@Y@@2 VX@@A)1>C:Usersdocumentsvisual studio 2012ProjectsC++primer第13章コピー、付与、破棄Debug練習13.44_staticクラスメンバー_test.Exce:fatal error LNK 1120:1個の解析不能外部コマンド
理由は簡単で,Yクラスの静的属性xは初期化されていないため,コンパイラはxというオブジェクトの具体的な属性を取得できない.
解決:
コード:
#include <iostream>
using namespace std;
class X{
public:
X():value(1){cout<<"X() "<<endl;}
X(const X &x){cout<<"X(const X &x) "<<endl;}
int value;
};
class Y{
public:
Y(){};
static X x;
};
//X Y::x=X();//
int _tmain(int argc, _TCHAR* argv[])
{
Y y;
cout<<y.x.value<<endl;
return 0;
}
結果はコンパイルエラー:
1>練習13.44_staticクラスメンバー_test.obj:error LNK 2001:解析不能外部符号「public:static class X Y::x」(?x@Y@@2 VX@@A)1>C:Usersdocumentsvisual studio 2012ProjectsC++primer第13章コピー、付与、破棄Debug練習13.44_staticクラスメンバー_test.Exce:fatal error LNK 1120:1個の解析不能外部コマンド
理由は簡単で,Yクラスの静的属性xは初期化されていないため,コンパイラはxというオブジェクトの具体的な属性を取得できない.
解決:
#include <iostream>
using namespace std;
class X{
public:
X():value(1){cout<<"X() "<<endl;}
X(const X &x){cout<<"X(const X &x) "<<endl;}
int value;
};
class Y{
public:
Y(){};
static X x;
};
X Y::x=X();
int _tmain(int argc, _TCHAR* argv[])
{
Y y;
cout<<y.x.value<<endl;
return 0;
}