2

私は C++ の学習を払いのけ、ここでプログラムを作成しようとしています。

class Quad{
public:
Quad(){}
protected:
vec _topLeft, _topRight, _bottomLeft, _bottomRight;
};

class IrregularQuad : public Quad{
public:
IrregularQuad(vec topLeft, vec topRight, vec bottomLeft, vec bottomRight)
: _topLeft(topLeft), _topRight(topRight), _bottomLeft(bottomLeft), _bottomRight(bottomRight)
{}
};

上記の Dervied クラス コントラクターで次のようなコンパイル エラーが発生します。 メンバー初期化子 _topLeft は、非静的データ メンバーまたは基本クラスに名前を付けません (他のメンバーでも同様のエラーが発生します)。

何が起こっているのか理解できません。Initalizer リストなどを使用して保護されたメンバーを初期化できないということですか?

4

3 に答える 3

3

Initalizer リストなどを使用して保護されたメンバーを初期化できないということですか?

右。コンストラクター初期化子リストで初期化できるのは、クラス独自のメンバーのみです (OTOH によって、コンストラクターの本体でそれらに割り当てることができます)。基本サブオブジェクトが最初に初期化されます。

どういうわけか、作業を基本クラスのコンストラクターの 1 つに委任する必要があります。

class Base {

    explicit Base(int i) : m(i)
    {}
protected:
    int m;
};

class Derived : public Base {
    explicit Derived(int i) : Base(i)
    { }
};
于 2013-06-19T16:34:43.970 に答える
1

派生クラスの初期化子リストで基底クラスのメンバーを初期化しません。コンストラクターを追加しQuadてそれを行うことも、派生クラス コンストラクターの本体に自分で設定することもできます。

于 2013-06-19T16:33:49.827 に答える
0

これはエラー C2614 の複製です: 'ChildClass' : メンバーの初期化が不正です: 'var1' はベースまたはメンバーではありません

初期化リストでは、メンバーまたは基本クラスのみを初期化できます。

于 2013-06-19T16:34:58.283 に答える