【问题标题】:Illegal member initialization in C++C++ 中的非法成员初始化
【发布时间】:2012-04-24 08:56:16
【问题描述】:
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”不是基类或成员

为什么会出现上述错误,因为我们可以从派生类访问受保护的成员?

【问题讨论】:

标签: c++


【解决方案1】:

您不能在派生类初始化器列表中初始化基类成员。

您需要为基类提供构造函数:

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;
};

【讨论】:

  • 如何在派生类中初始化基类成员?
  • @venkysmarty 你也可以在派生构造函数的主体中写myType = 1;
猜你喜欢
  • 1970-01-01
  • 2015-11-15
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 2015-01-22
  • 2011-10-06
相关资源
最近更新 更多