C++使用static的錯誤:無法解析的外部符號、“static”不應在檔案範圍內定義的成員函式上使用 .
靜態成員函式可以直接訪問該類的靜態資料和函式成員,而訪問非靜態資料成員必須通過引數傳遞的方式得到一個物件名,然後通過物件名來訪問。
class Myclass
{
private:
int a,b,c;
static int Sum; //宣告靜態資料成員
public:
Myclass(int a,int b,int c);
void GetSum();
};
int Myclass::Sum=0; //定義並初始化靜態資料成員
Myclass::Myclass(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
Sum+=a+b+c;
}
void Myclass::GetSum()
{
cout <<"Sum=" <<Sum <<endl;
}
int main(void)
{
Myclass me(10,20,30);
me.GetSum();
system("pause");
return 0;
}
由上例可知,非靜態成員函式可以任意地訪問靜態成員函式和靜態資料成員。
非靜態成員函式Myclass(int a,int b,int c)和GetSum()都訪問了靜態資料成員Sum。
靜態成員函式不能訪問非靜態成員函式和非靜態資料成員。
關於靜態成員函式,可以總結為以下幾點:
出現在類體外的函式定義不能指定關鍵字static;
靜態成員之間可以相互訪問,包括靜態成員函式訪問靜態資料成員和訪問靜態成員函式;
非靜態成員函式可以任意地訪問靜態成員函式和靜態資料成員;
靜態成員函式不能訪問非靜態成員函式和非靜態資料成員;
由於沒有this指標的額外開銷,因此靜態成員函式與類的全域性函式相比速度上會有少許的增長;
呼叫靜態成員函式,可以用成員訪問操作符(.)和(->)為一個類的物件或指向類物件的指標呼叫靜態成員函式,
當同一類的所有物件使用一個量時,對於這個共用的量,可以用靜態資料成員變數,這個變數對於同一類的所有的物件都取相同的值。靜態成員變數只能被靜態成員函式呼叫。靜態成員函式也是由同一類中的所有物件共用。只能呼叫靜態成員變數和靜態成員函式。