4
class ZooAnimal {
public:
    virtual void draw();
    int resolveType() {return myType;}
protected:
    int myType;
};

class Bear : public ZooAnimal {
public:
    Bear (const char *name) : myName(name), myType(1){}
    void draw(){ };
private:
    std::string myName;
};

void main()
{
   
}

上記のコードをコンパイルすると、次のエラーが発生します

エラー C2614: 'Bear': メンバーの初期化が無効です: 'myType' はベースまたはメンバーではありません

派生クラスから保護されたメンバーにアクセスできるのに、なぜ上記のエラーが発生するのですか?

4

1 に答える 1

15

派生クラスの初期化子リストで基底クラスのメンバーを初期化することはできません。

基本クラスにコンストラクターを提供する必要があります。

class ZooAnimal {
public:

    ZooAnimal(int type) : myType(type) {}

    virtual void draw();
    int resolveType() {return myType;}
    protected:
    int myType;
};

派生クラスから呼び出します。

class Bear : public ZooAnimal {
public:
                            //here//
Bear (const char *name) : ZooAnimal(1), myName(name) {}

void draw(){ };
private:
    std::string myName;
};
于 2012-04-24T08:56:59.017 に答える