我想了解靜態成員多一點,我一直在嘗試使用代碼片段來查看哪些方法合法,哪些不合法。通過對象實例訪問私有靜態成員
我的理解是,靜態變量不駐留在類/結構中,但是是分開的。換句話說,下面代碼中的變量y
應該被A::y
而不是this->y
訪問,因此我的假設是下面的代碼不會被編譯。 (MingGW),我很驚訝。
有人可以解釋這種訪問機制是如何工作和實施的。
// ClassA.h
class A{
private:
int x;
static int y;
public:
void setX(int x){this->x = x;}
void setY(int y){this->y = y;}
}
// main.cpp
#include "ClassA.h"
int main (int argc,char* argv[]){
A my_A;
my_A.setX(5);
my_A.setY(10);
return 0;
}
靜態變量確實存在於類中(它們屬於類本身)。並且仍然可以通過類成員訪問運算符來訪問靜態成員。 – 0x499602D2 2014-09-24 01:22:44
編譯代碼時爲什麼會出現錯誤? 克++ -o測試的main.cpp '/tmp/cciEVrgm.o:在函數 'A :: SETY(INT)': main.cpp中:(text._ZN1A4setYEi [_ZN1A4setYEi] + 0×10):未定義參考'A :: y' collect2:錯誤:ld返回1退出狀態' – 2014-09-24 01:25:22
爲了簡單起見,我沒有添加靜態成員'y'定義。對於那個很抱歉。 – 2014-09-24 01:28:21