根据this必须定义虚函数,否则链接器会抱怨&报告错误"对vtable" 的未定义引用,但为什么没有ideone编译器为以下代码提供任何错误?
#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
cout<<"test() is called\n";
}
virtual void test();
};
int main() {
Test t;
// your code goes here
return 0;
}
答案 0 :(得分:7)
您没有正确阅读文档。相关段落的第一句话说:
ISO C ++标准规定必须定义非纯虚拟类的所有虚方法,但不要求违反此规则[class.virtual] / 8的任何诊断。
因此,预计您可能不会收到错误,特别是因为您实际上并未调用test()
(尽管构造函数的输出存在谎言)。
实际上,只有在以下情况下,您才有可能获得此诊断:
virtual
析构函数未定义但不要搞错:无论你的程序都有未定义的行为。