我想了解静态成员多一点,我一直在尝试使用代码片段来查看哪些方法合法,哪些不合法。通过对象实例访问私有静态成员
我的理解是,静态变量不驻留在类/结构中,但是是分开的。换句话说,下面代码中的变量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