【发布时间】:2015-04-24 20:27:04
【问题描述】:
根据this必须定义虚函数,否则链接器会报错"undefined reference to 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;
}
【问题讨论】:
-
你没有在任何地方调用未定义的成员。
-
@juanchopanza 我在一些编译器上看到,即使未调用成员,未定义的虚函数也会导致错误。我不记得标准是否允许这样做。
-
可能是因为(在内联和其他优化之后)程序从不尝试使用 vtable,所以没有任何需要定义的引用。如果你做了任何需要它的事情,你可能仍然会得到一个错误。
-
@MikeSeymour:如果是,调用将失败,因为没有可用的定义。
标签: c++ gcc g++ virtual-functions