我很确定我在WaterHeater及其派生类中定义了每个函数,所以任何人都可以告诉我为什么我会收到此链接错误?提前感谢一大堆,我已经有一段时间没有找到任何解决方案了。
这是我在编译控制台项目时遇到的错误:
heater.cpp:(.text$_ZN11WaterHeaterC2ERKS_[_ZN11WaterHeaterC2ERKS_]+0x13): undefined reference to `vtable for WaterHeater'
[Error] Id returned exit 1 status
recipe for target 'LabProject4.exe' failed
这是我的代码:
class WaterHeater{
public:
void print() const;
virtual WaterHeater* clone() const;
virtual float installedPrice( const bool _hookUp, const bool _newVent) const = 0;
float getPrice() const{ return d_price; };
};
class Tankless: public WaterHeater{
public:
Tankless( ...){} const;
};
class StorageTank: public WaterHeater{
public:
StorageTank( ...){} const;
};
float Tankless::installedPrice( const bool _hookUp, const bool _newVent ) const{...}
WaterHeater* Tankless::clone() const{...}
float StorageTank::installedPrice( const bool _hookUp, const bool _newVent ) const{...}
WaterHeater* StorageTank::clone() const{...}
void WaterHeater::print() const{...}
答案 0 :(得分:3)
如果您的代码段是用于编译程序的实际代码段,则问题是WaterHeater::clone
方法没有实现。
它是一个虚方法,因此输出错误。
答案 1 :(得分:0)
这是因为你没有为WaterHeater的两个虚拟机定义机构。我知道它们被派生类覆盖了,但是你应该让它们变为纯(= 0;)或提供一些虚拟体。