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()
{
}
当我编译上面的代码时,我正在跟踪以下错误
为什么我会遇到上述错误,因为我们可以从派生的Cals访问 protected 成员?
最佳答案
您不能在派生类初始化器列表中初始化基类成员。
您需要为基类提供一个构造函数:
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;
};
关于c++ - C++中的非法成员初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10294731/