如下
class A
{
   const int SIZE = 100;
   int array[size];
    ....
}
为什么这样会出错???
麻烦详细讲解一下
为什么在类的声明中不可以初始化数据成员???

解决方案 »

  1.   

    只有静态的成员才能在类定义中赋初值的:
    static const int SIZE = 100;
      

  2.   

    类声明时类还没有存储空间,因此不行。
    方法,
    class A
    {
    public:
       A();
       const int SIZE;
       int array[size];
        ....
    }A::A() : SIZE(10)
    {
    其它初始化。
    }
    采用初始化表进行初始化。
      

  3.   

    类地数据成员可以在类的构造函数中初始化,但这个SIZE是个const变量,又要在定义时初始化,因此,要设成静态的,其实,仔细想想,也应该是静态的,既然各个对象的SIZE的值都相同,干吗不设成静态的,大家共享?明白了吗?
      

  4.   

    copy from 林锐《c++高质量编程>const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。    不能在类声明中初始化const数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道SIZE的值是什么。    class A    {…        const int SIZE = 100;   // 错误,企图在类声明中初始化const数据成员        int array[SIZE];        // 错误,未知的SIZE    }; const数据成员的初始化只能在类构造函数的初始化表中进行,例如    class A    {…        A(int size);        // 构造函数        const int SIZE ;        };    A::A(int size) : SIZE(size) // 构造函数的初始化表    {      …    }    A  a(100);  // 对象 a 的SIZE值为100    A  b(200);  // 对象 b 的SIZE值为200     怎样才能建立在整个类中都恒定的常量呢?别指望const数据成员了,应该用类中的枚举常量来实现。例如    class A    {…        enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量        int array1[SIZE1];          int array2[SIZE2];    };    枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。