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 回答