[英]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.