未明确引用vtable - C ++链接错误

时间:2014-10-15 14:34:52

标签: c++ compiler-errors linker virtual linker-errors

我很确定我在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

这是我的代码:

heater.h

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{...}

2 个答案:

答案 0 :(得分:3)

如果您的代码段是用于编译程序的实际代码段,则问题是WaterHeater::clone方法没有实现。 它是一个虚方法,因此输出错误。

答案 1 :(得分:0)

这是因为你没有为WaterHeater的两个虚拟机定义机构。我知道它们被派生类覆盖了,但是你应该让它们变为纯(= 0;)或提供一些虚拟体。