0

我有一堂这样的课:

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;
       ^

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

4

2 回答 2

1
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)
{
}

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

于 2016-08-17T21:18:30.173 回答
0

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

于 2016-08-17T21:21:28.523 回答