class CmlObject : public CObject
{
DECLARE_SERIAL( CmlObject )
public:
CmlObject ();
virtual ~CmlObject fice();
         static const int Version = 1;  //版本
} static const int Version = 1;  的词法对不对本人的目的是定一个能class能访问的,又是class内本身的常量.
   
  if (CmlObject::Version = 1)
  {  }
  else
  {  }

解决方案 »

  1.   

    如果是常量,可以用
    class CmlObject : public CObject
    {
     enum {Version = 1};  //版本
    }
    另外,if (CmlObject::Version = 1) 应该是 if (CmlObject::Version == 1)把,^_^
      

  2.   

    static const int Version = 1;
    标准C++语法下是正确的,用gcc可以编译。
    VC6的编译器下不允许这样做,你现在明白为什么有这么多人说MS的编译器垃圾了吧?
    VC的编译器有很多不是按标准做的
      

  3.   

    对不起,不能这样写,你的是在类申明中,在申明中是不能赋值的。类申明中:static const int Version;  //版本
    在类的实现文件里加入:const int CYourClass::Version=1;
      

  4.   

    在vc6下要这么写
    class CmlObject : public CObject
    {
    DECLARE_SERIAL( CmlObject )
    public:
    CmlObject ();
    virtual ~CmlObject fice();
             static const int Version;  //版本
    };const int CmlObject::Version=1; // 此处进行赋值
      

  5.   

    在VC6下编译能通过啊。不过有点怪,作为类的const应该在构造函数中初始化的,可又是静态又是常量的,如上也行。
      

  6.   

    静态的变量是共享的 
    不需要同成员访问 
    const int CmlObject::Version=1; 
    必须在外部显式初始化 const只能赋值一次除非修改其const属性
      

  7.   

    即是静态又是常量,常量一般得立即置值吧,不然就成了变量,可类中声明又不允许置值,好像有点MAO盾.
      

  8.   

    看错了,还以为你的VERSION是类的成员
    既然是常量,我觉得没必要搞成静态的吧,静态的目的在于使之只有一个拷贝,对这个拷贝的操作总是对同一对象的操作,而常量不可修改,那静态在这里还有什么意义嘛
      

  9.   

    (4)如何初始化类内部的常量?
             一种方法就是static 和 const 并用,在内部初始化,如上面的例子;
             另一个很常见的方法就是初始化列表:
             class A
             {
              public:
                    A(int i=0):test(i) {}
              private:
                    const int i;
              };
              还有一种方式就是在外部初始化,例如:
             class A
             {
              public:
                    A() {}
              private:
                    static const int i;  file://注/意必须是静态的!
              };
              const int A::i=3;
      

  10.   

    标准的,也支持在类的申明中
    static const int i = 1;