Ich habe eine Klasse Base
mit einer rein virtuellen Funktion f()
. Eine andere Klasse Derived
stammt von Base
. Ich rufe f()
von innerhalb Derived
. Und mit g ++ bekomme ich einen Fehler vom Linker.Warum klagen g ++ nicht, wenn abgeleitete Klasse reine virtuelle Funktion der Basis aufruft?
[[email protected] 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
Es scheint mir, dass der Fehler vom Linker gefangen wurde. Warum hat der Compiler diesen Fehler nicht gemeldet? Warum überlassen Sie es dem Linker? Hier
ist der Code:
#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;
}
Könnten Sie bitte den Quellcode anzeigen? Das würde es viel leichter verständlich machen. –
Bitte zeigen Sie Ihren Beispielcode. Ohne das wird es schwer zu beantworten sein. –