昨天看过了几个帖子,说是在类中的static const数据成员必须要在构造函数中初始化,下面的代码是按照这个意思编写的么?
如果是为什么会报下列错误?
#include <iostream>
#include <string>
using namespace std;
 
class A
{
public:
const int i;
 A();
private:}A::A()
{
i=10;
}void main()
{}
////////////////////////////////////////////////////////////////////////////////////--------------------Configuration: fas - Win32 Debug--------------------
Compiling...
point.cpp
E:\temp\fas\point.cpp(17) : error C2533: 'A::A' : constructors not allowed a return type
E:\temp\fas\point.cpp(18) : error C2166: l-value specifies const object
Error executing cl.exe.point.obj - 2 error(s), 0 warning(s)

解决方案 »

  1.   

    有两个错误,1、类定义没有加分号 2、应该是在初始值设定项列表中初始化class   A 

    public: 
    const   int   i; 
      A(); 
    private: };A::A() : i(10)
    {
    } void   main() 
    { } 
      

  2.   


    #include   <iostream> 
    #include   <string> 
    using   namespace   std; 
      
    class   A 

    public: 
    const   int   i; 
      A(); 
    private: };  //////////////////////类结束要用分号A::A():i(10)   /////////////不是在构造函数,是构造函数初始化列表里
    { } 
    void   main() 
    { }
      

  3.   

    类中的const类型现在知道怎么初始化了,想问static const类型如何初始化?
      

  4.   

    哦,第一个帖子写错了……const   int   i;   //本想写成  static const   int   i;
      

  5.   

    代码重发一下:
    #include <iostream>
    #include <string>
    using namespace std;
     
    class A
    {
    public:
    static const  int i;
    A(); 
     
    private:};A::A():i(12)
    {

    }; 
    void main()
    { }////////////////////////////////////////////////////////////////////
    --------------------Configuration: fas - Win32 Debug--------------------
    Compiling...
    point.cpp
    E:\temp\fas\point.cpp(18) : error C2438: 'i' : cannot initialize static class data via constructor
    Error executing cl.exe.fas.exe - 1 error(s), 0 warning(s)
      

  6.   

    顶一下,这个问题在c++ primer 书中提到过,可是按照书上写还是有问题。难道是VC环境造成的?请指教
      

  7.   

    static静态成员变量要在类外部定义:
    const int A::i = 12;
      

  8.   

    Mackz:就是说在类定义里不可以出现 static const 修饰的成员的定义(加上初始化)?还是现在类内部定义一个常量,在类外部再赋值?是哪种意思?还是都不是?
      

  9.   

    #include <iostream>
    #include <string>
    using namespace std;
     
    class A
    {
    public:
    static const  int i;
    A(); 
     
    private:};A::A()
    {
    cout<<"i is "<<i<<endl;
    }; static const int A::i=21;void main()

    A abc;
    }
    ///////////////////////////////////////////////////////////
    --------------------Configuration: fas - Win32 Debug--------------------
    Compiling...
    point.cpp
    E:\temp\fas\point.cpp(22) : error C2720: 'i' : 'static ' storage-class specifier illegal on members
    Error executing cl.exe.fas.exe - 1 error(s), 0 warning(s)
    这是加上static后的编译结果,但是把static去掉之后能运行,结果正确。还是不明白这是为什么?原理想不明白。请高手点化。
      

  10.   

    #include   <iostream>
    #include   <string>
    using   namespace   std;class   A
    {
    public:
    static   const     int   i;
    A();  

    private:

    };
    const A::i=12;//类变量要在类外边初始化
    A::A()
    {

    };  
    void   main()
    {  

      

  11.   

    为什么在外面初始化要写出:
    const   int   A::i=21; 而不是:
    static   const   int   A::i=21; 
      

  12.   

    类里面是声明变量;类外面是定义变量,不要加static修饰符。为什么?问设计C++的人去。
      

  13.   

    TO Mackz:哦,明白了。本以为里面还有什么道理.....
      

  14.   

    为什么在外面初始化要写出: 
    const  int  A::i=21; 而不是: 
    static  const  int  A::i=21; 
    因为只有类的static变量才能这样放在类成员函数之外进行初始化,所以static也就不用写了