繁体   English   中英

虚函数和双重继承

[英]Virtual functions and double inheritance

我已经尝试解决这个问题了好几个小时,但是找不到解决方案。 代码示例:

class IColor { // color interface
public:
    virtual void print();
};

class Color : public IColor { // abstract color class

};

class RGB : public Color { // color implementation
public:
    void print()
    {
        std::cout << "hi";
    }
};

int main() {
    IColor* col = new RGB();
    col->print();
    return 0;
}

但是,编译的结果是链接器错误:

/home/snndAJ/ccnvQHgL.o:(.rodata._ZTI5Color[_ZTI5Color]+0x8): undefined reference to `typeinfo for IColor'
/home/snndAJ/ccnvQHgL.o:(.rodata._ZTV5Color[_ZTV5Color]+0x8): undefined reference to `IColor::print()'
collect2: error: ld returned 1 exit status

(不)在线示例: https : //ideone.com/YikYwe

将您的基类更改为具有虚拟成员:

class IColor {
public:
    virtual void print() = 0;
};

就您的代码而言,您正在声明IColor::print但从未定义它,这导致链接器抱怨的未解析引用。 纯虚函数不需要定义,在这种情况下,实际上没有定义是有意义的,因为每个叶子类都必须重写此方法。

实际上,您很可能还需要虚拟析构函数:

virtual ~IColor() {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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