我在用VC时遇到了这个问题://test.h//
class test
{
private:
    ...
public:
    test(int k=0);
    ...
};test::test(int k)
{
   ...
}//x.cpp//
class book
{
private:
   test m(10);  //此处报错: syntax error: 'constant'
   ...
public:
   ...
}
  ...怎么回事?

解决方案 »

  1.   

    类定义中不能对成员赋值,只能声明。应该在book的构造函数中对test m初始化。如下:
    book::book()
     : m(10)
    {
    }
      

  2.   

    class book
    {
    private:
       test m;   
        ...
    public:
       book(int n);
    }book::book(int n):m(n)
    {}
      

  3.   

    test m(10)是声明还是调用?如果是声明可改为test m( int k = 10), 如果是调用则可(test)m(10)(m()必须声明)
      

  4.   

    这属于对象成员问题,初始化只能用
    初始化列表,按如下改正
    class book
    {
    private:
       test m;  //此处报错: syntax error: 'constant'
       ...
    public:
       ...
    }book::book():m(10)
      

  5.   

    这属于对象成员问题,初始化只能用
    初始化列表,按如下改正
    class book
    {
    private:
       test m;  //此处报错: syntax error: 'constant'
       ...
    public:
       ...
    }book::book():m(10)
      

  6.   

    楼上的写法是正确的。
    对于在类中创建的对象成员,要在该类的构造函数中付初值,声明的时候不能赋值。
    class book
    {
    private:
        test m;
    public:
        book():m(10){};     //是定义,不是声明构造函数
    }
    我想你要的就是这个功能吧!
    这样,book类中的成员m(test类的对象)调用test类的构造函数初始化m。
    另外,像这样的初始化类成员,要在构造函数的定义时进行,而不是声明时。
    所以,上面的代码也可以写成
    class book
    {
    private:
        test m;
    public:
        book():;       //声明构造函数
    }book::book():m(10)  //定义构造函数
    {
    }
      

  7.   

    一点错误,上面倒数第5行    book():;       //声明构造函数应该是    book();       //声明构造函数sorry
    :)
      

  8.   

    简单说不能把10赋给m,因为m是private,编译器把它看成const不可更改.
    解决办法可在在构造函数中进行
    book::book():m(10)
      

  9.   

    class book
    {
    private:
       test m(10);  //此处报错: syntax error: 'constant'
    //类里面定义变量不能初始化的啊
    //应该这样啊:
    test m
       ...
    public:
       ...
    }
      

  10.   

    class book
    {
    private:
       test m(10);   
    }