【发布时间】:2012-09-19 13:17:04
【问题描述】:
我有一个带有纯虚函数f() 的类Base。另一个类Derived 派生自Base。我从Derived 中调用f()。并且使用 g++,我从链接器中得到一个错误。
[agnel@dooku tmp]$ g++ pure_virtual_function_call.cpp
/tmp/ccGQLHi4.o: In function `Derived::f()':
pure_virtual_function_call.cpp:(.text._ZN7Derived1fEv[_ZN7Derived1fEv]+0x14): undefined reference to `VirtualBase::f()'
collect2: error: ld returned 1 exit status
在我看来,错误是被链接器捕获的。为什么编译器没有报告这个错误?为什么要把它留给链接器?
代码如下:
#include <iostream>
using namespace std;
class VirtualBase {
public:
virtual void f() = 0;
};
class Derived : public VirtualBase {
public:
void f(){
VirtualBase::f();
cout << "Derived\n" ;
}
};
int main(){
Derived d;
d.f();
return 0;
}
【问题讨论】:
-
能否请您显示源代码?这样会更容易理解。
-
请显示您的示例代码。没有这个,就很难回答了。
标签: c++ linker g++ ld pure-virtual