是现代g++编译器解决的vtable错误的未定义引用
is the undefined reference to vtable error solved by modern g++ compilers?
根据此,必须定义虚拟函数,否则链接器将抱怨&报告错误"对vtable的未定义引用",但为什么ideone编译器不为以下代码提供任何错误?
#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
cout<<"test() is calledn";
}
virtual void test();
};
int main() {
Test t;
// your code goes here
return 0;
}
您没有正确阅读文档。相关段落的第一句话是:
ISO C++标准规定,必须定义类的所有非纯虚拟方法,但不需要对违反此规则的行为进行任何诊断[class.virtual]/8。
因此,您可能不会得到错误,特别是因为您实际上并没有调用test()
(尽管构造函数的输出中存在谎言)。
实际上,只有在以下情况下,你才可能得到这种诊断:
- 您调用了一个未定义的虚拟函数
- 实例化一个对象,该对象的
virtual
析构函数未定义
但别搞错了:不管怎样,你的程序都有未定义的行为。
相关文章:
- 纯虚拟类和错误未定义对 'vtable 的引用
- 看起来如此主要的错误.cpp:(.text.startup+0xd6):未定义对"vtable for Counter"的引用?
- 使用 CMake 编译时,更改头文件的位置会导致缺少 vtable 错误
- 未定义对 vtable 错误的引用
- CMake 构建错误 - 虚拟方法错误缺少 vtable
- 多个vtable,在打电话时出现错误
- 访问VTable直接发出未定义的错误
- 实现纯虚拟方法后,VTable C 错误
- "vtable"链接器错误(涉及带有"=default"的虚拟析构函数) - Clang 3.1 中的潜在错误?
- 使用CMake构建Qt项目并从QMainWindow继承会导致未引用的vtable错误
- 如何解决"未定义对'vtable for <>的引用<ClassName>"错误?
- 奇怪的链接器错误未定义对 vtable 的引用
- 对受内联构造函数影响的vtable错误的未定义引用
- 是现代g++编译器解决的vtable错误的未定义引用
- 我将如何从这个抽象类创建一个子类?Vtable 错误
- 来自 vtable 的未定义符号是否意味着接口和实现之间存在错误
- 简单的应用程序"undefined reference to vtable"错误?[Qt]
- 对Vtable错误的奇怪的未定义引用
- EMF文件(.so)调试,符号找不到VTable错误
- 对"用于实现的 vtable"错误的未定义引用