Aufruf von abstrakte Methoden in abstrakten Klassen
-
#if !defined RECORD_H #define RECORD_H #include <string> class Record { public: Record( const std::string& p_sContent ) { parse( p_sConten ); } virtual ~Record() { } protected: virtual void parse ( const std::string& p_sContent ) = 0; }; #endif
#if !defined(SIGNALRECORD_H) #define SIGNALRECORD_H #include "record.h" class SignalRecord : public Record { public: SignalRecord( const std::string& p_qsContent ); virtual ~SignalRecord(); protected: void parse ( const std::string& p_qsContent ) { // do Something } }; #endif
#include "signalrecord.h" int main( int argc, char** argv ) { Signalrecord("Test"); return 1; }
Beim Linken werden der Fehler gemeldet, dass parse() in Record nicht implementiert ist.
Weiß jemand, wie ich dies lösen kann?
-
[cpp]
virtual void parse ( const std::string& p_sContent ) = 0;
[/cpp]void parse ( const QString& p_qsContent ){}
-
Hallo,
ja, du musst entweder die Funktion in Record implementieren und die darf dann nicht pure virtual sein, oder du darfst sie in Record nicht aufrufen.
Du kannst aber den Destruktor pure virtual machen, dann ist die Klasse auch abstrakt, falls das sein muss.