簡體   English   中英

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

[英]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()
{

}

當我編譯上面的代碼時,我正在跟蹤錯誤

錯誤C2614:'熊':非法成員初始化:'myType'不是基礎或成員

為什么我會在錯誤之上糾結錯誤,因為我們可以從派生的calss訪問受保護的成員?

您無法在派生類初始化列表中初始化基類成員。

您需要為基類提供構造函數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM