我已經開始使用Java進行編程,剛剛完成了我認爲在語言知識方面的「良好」級別。聲明C++靜態成員變量的「未定義引用」
爲了好玩,我決定開始使用C++編程,我對這門語言很陌生,但我是一名快速學習者,我認爲它離Java不遠。
我創建了一個測試類,它有一個值和一個名稱作爲屬性,一個對象計數器作爲全局變量。
#include<iostream>
/* local variable is same as a member's name */
class Test
{
private:
double x;
std::string name;
static int nb;
public:
Test(double x, std::string n)
{
this->x=x;
this->name=n;
nb=nb+1;
}
void setX (double x)
{
// The 'this' pointer is used to retrieve the object's x
// hidden by the local variable 'x'
this->x = x;
}
double getX()
{
return this->x;
}
std::string getName()
{
return this->name;
}
static int getNb()
{
return nb;
}
};
int main()
{
Test obj(3.141618, "Pi");
std::cout<<obj.getX()<<" "<<obj.getName()<<" "<<Test::getNb()<<std::endl;
return 0;
}
當執行PROGRAMM輸出這個錯誤:
In function `Test::Test(double, std::string)':
(.text._ZN4TestC2EdSs[_ZN4TestC5EdSs]+0x4a): undefined reference to `Test::nb'
(.text._ZN4TestC2EdSs[_ZN4TestC5EdSs]+0x53): undefined reference to `Test::nb'
In function `Test::getNb()':
(.text._ZN4Test5getNbEv[_ZN4Test5getNbEv]+0x6): undefined reference to `Test::nb'
error: ld returned 1 exit status
一些中國給我。
我不明白。
'試驗(雙X,的std :: string){這個 - > X = X;這 - >名= N; NB = NB + 1; }'可以寫得更乾淨,就像'Test(double x_,std :: string name_):x(x_),name(name_){++ nb; }'。使用初始值設定項,只要你可以贏得勝利和proffit。 – kfsone
好問題。所使用的代碼可以縮減很多,但其他方面很簡單並且重點突出。無法持有重複對他們,因爲這是很難谷歌,直到你知道關鍵字。 – user4581301