VC ++ 6错误C2059:语法错误:'常量'

时间:2010-12-23 13:12:32

标签: c++ vc6

使用MSVC ++ 6.0制作这个简单的类

class Strg
{
public:
    Strg(int max);
private:
    int _max;
};


Strg::Strg(int max)
{
  _max=max;
}

如果我在以下地方使用它听起来不错:

main()
{
  Strg mvar(10);
}

但是现在如果我在另一个班级使用它:

class ok
{
public:
    Strg v(45);
};

我收到邮件错误: 错误C2059:语法错误:'常数'

你能告诉我更多吗?

2 个答案:

答案 0 :(得分:7)

应该是:

class ok
{
public:
    Strg v;
    ok() : v(45) {}
};

应使用initialization lists初始化没有默认构造函数(在本例中为v)的非静态成员变量。另一方面,在函数(如main)中,您可以使用常规构造函数语法。

答案 1 :(得分:4)

编译器抱怨的是,您正在尝试提供有关如何在类定义中实例化类成员v的说明,这是不允许的。

实例化v的位置将在构造函数内部或构造函数的初始化列表中。例如:

内部构造函数:

class ok
{
public:
    Strg v;
    ok() {
        v = Strg(45);
    }
};

在初始化列表中:

class ok
{
public:
    Strg v;
    ok() : v(45) {}
};

执行此操作的正确方法是最后一个(否则,v还需要一个默认构造函数,并且会初始化两次)。