实现虚函数时对vtable的未定义引用

时间:2016-05-26 11:36:03

标签: c++

我尝试实现" C ++编程简介"作者:Jesse Liberty和Tim Keogh,但实现纯虚函数正在编译但不是构建。它给出了错误:对圆圈' vtable的未定义引用

我尝试将变量ComponentExample替换为虚函数itsRadius以查看它是否可行但是它开始在switch语句中给出了相同的错误,但GetItsRadius和{ {1}}以及与Rectangle相同的错误。

以下是代码:

Square

1 个答案:

答案 0 :(得分:3)

这里的问题是你没有定义函数Circle::Draw()。如果你定义它,代码就会编译。

另外,您应该使Shape析构函数为虚拟(否则在某些情况下可能无法正确销毁派生类的实例)。这里的规则是,如果一个类有任何虚拟成员,那么析构函数也应该是虚拟的。

我知道您看到的编辑信息非常神秘。我见过这个" undefined v-table"编译器错误是一些其他问题的副作用,就像在这种情况下一样。只是为了让你知道,让这个错误消失的一个好方法是移动受影响类的一个虚函数定义(我用上面的Circle析构函数做了这个,首先将Shape析构函数设置为虚拟)。这揭示了更好的编译器错误的真正问题。