在构造函数参数列表中无效使用静态数据成员

invalid use of static data member in constructor parameter list

我有一个 class 像这样的东西:

class Foo : public Bar {
double v1;
double v2;
...
public:
explicit Foo (double v1_ = 1.0, double v2_ = v1 > 0.0 ? 2.0 : 0.0)
    : v1(v1_), v2(v2_)
{
    // do something
}

// do other things

};

但是我得到如下编译错误:

error: invalid use of non-static data member Foo::v1
note: declared here
double v1;
       ^

感谢任何解决此错误的建议。另外,请指出我代码中的错误并稍微解释一下,以便我更好地理解。提前致谢。

explicit Foo (double v1_ = 1.0, double v2_ = v1 > 0.0 ? 2.0 : 0.0)
                                             ^^

在您使用 v1 时它还不存在。

很遗憾,此时您也无法使用 v1_。您可以做的是将构造函数拆分为两个版本:

// for two arguments
Foo (double v1_, double v2_)
    : v1(v1_), v2(v2_)
{
    // do something
}

// for zero or one argument
explicit Foo (double v1_ = 1.0)
    : Foo(v1_, v1_ > 0.0 ? 2.0 : 0.0)
{
}

(这里我使用委托构造函数的特性来避免代码重复)

当你调用构造函数时对象不存在是的。它是创建并 returns 它的构造函数。所以你不能在构造函数的参数中引用 v1 - 仍然没有对象,也没有 v1.