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_残念ながら、この時点でも使用できません。代わりにできることは、コンストラクターを 2 つのバージョンに分割することです。

// 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 に答える