C++中的非法成员初始化

ven*_*rty 2 c++

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()
{

}
Run Code Online (Sandbox Code Playgroud)

当我编译上面的代码时,我正在跟踪错误

错误C2614:'熊':非法成员初始化:'myType'不是基础或成员

为什么我会在错误之上纠结错误,因为我们可以从派生的calss访问受保护的成员?

Luc*_*ore 13

您无法在派生类初始化列表中初始化基类成员.

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

class ZooAnimal {
public:

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

    virtual void draw();
    int resolveType() {return myType;}
    protected:
    int myType;
};
Run Code Online (Sandbox Code Playgroud)

并从派生类中调用它:

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

void draw(){ };
private:
    std::string myName;
};
Run Code Online (Sandbox Code Playgroud)

  • @venkysmarty您还可以在派生构造函数的主体中编写“myType = 1;”。 (2认同)