简体   繁体   中英

Illegal member initialization in 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()
{

}

When I am compiling above code I am geeting following error

error C2614: 'Bear' : illegal member initialization: 'myType' is not a base or member

Why I am geeting above error, as we can access protected member from derived calss?

You can't initialize base class member in derived class initializer lists.

You'll need to provide a constructor to the base class:

class ZooAnimal {
public:

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

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

and call it from the derived class:

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

void draw(){ };
private:
    std::string myName;
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM