class A
{
public:
static int a;
void printA ()
{
cout << a << endl;
}
};
void main ()
{
A a ;
a.printA ();
system("pause" );
}
这样写居然会报错,问题究竟在哪里?
给a赋值试试:
class A
{
public :
static int a;
void printA ()
{
a = 0;
cout << a << endl;
}
};
在生成对象时依然报同样的错误。
改成如下代码:
class A
{
public:
static int a;
void printA ()
{
cout << a << endl;
}
};
int A ::a = 0; //这里不允许指定存储类,所以切记不能加static
void main ()
{
A a ;
a.printA ();
system("pause" );
}
这样便可以编译通过。
就只多加了一句 int A ::a = 0; 便可以编译通过。
原来 int A ::a = 0; 这里并不只是初始化那么简单,并且还要给类中的 a 分配内存空间,如果不加这一句,就相当于还没有分配内存空间就直接使用,所以会报错。