【问题标题】:VC++6 error C2059: syntax error : 'constant'VC++6 错误 C2059:语法错误:'常量'
【发布时间】:2010-12-23 13:12:32
【问题描述】:

使用 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:语法错误:'常量'

你能告诉我更多吗?

【问题讨论】:

标签: c++ visual-c++-6


【解决方案1】:

应该是:

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

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

【讨论】:

    【解决方案2】:

    编译器抱怨的是你试图提供关于如何在你的类定义中实例化类成员 v 的指令,这是不允许的。

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

    内部构造函数:

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

    在初始化列表中:

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

    正确的做法是最后一种(否则,v 还需要一个默认构造函数,并且会被初始化两次)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多