类中static并没有那么简单

来源:互联网 发布:类似于完美世界 知乎 编辑:程序博客网 时间:2024/06/07 05:10
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;   //这里不允许指定存储类,所以切记不能加staticvoid main (){                 A a ;                 a.printA ();                 system("pause" );}

这样便可以编译通过。
就只多加了一句 int A ::a = 0; 便可以编译通过。
原来 int A ::a = 0; 这里并不只是初始化那么简单,并且还要给类中的 a 分配内存空间,如果不加这一句,就相当于还没有分配内存空间就直接使用,所以会报错。

0 0