C::B mingw pure virtual function
-
Hi Leute
ich habe ein Problem in meinem Projekt mit der Vererbung einer Funktion, bzw. der Reaktion darauf.
Folgende Situation:
Basisklasse
namespace baseserver { class TCPConnection : public tools::BaseThread { public: TCPConnection(); virtual ~TCPConnection(); protected: virtual void OnConnect() = 0; ... private: ... }; }Ableitung
class SenderConnection : public baseserver::TCPConnection { public: SenderConnection(); virtual ~SenderConnection(); private: virtual void OnConnect(); .... };In der Klasse TCPConnection wird an einer Stelle die Funktion OnConnect aufgerufen, was eigentlich kein Problem sein sollte, da die abgeleitete Klasse die Funktion überschrieben hat. Die Funktion ist selbstredend auch implementiert.
Leider bricht das Programm an der Stelle sofort ab und
gibt als Meldung:*Setting breakpoints
Debugger name and version: GNU gdb 6.8
Child process PID: 4620
Program exited with code 03.
Debugger finished with status 0
*Wenn ich die Abstraktion entferne und statt
virtual void OnConnect() = 0;lieber
virtual void OnConnect() {}schreibe, und dann debugge, lande ich tatsächlich in der OnConnect-Funktion der Basisklasse. Scheinbar hat der Compiler nicht gerafft, dass ich die Funktion überschrieben habe...
Hat jemand eine Idee zu dem Problem, bzw. ein vergleichbares Problem schonmal erlebt?
-
Scheinbar hat der Compiler nicht gerafft, dass ich die Funktion überschrieben habe
Das glaube ich kaum. Wie sieht ein Minimalbeispiel aus, das den Fehler produziert? Rufst du die Methode innerhalb eines Konstruktors auf? Was ist mit dem Callstack? Ansonsten: http://www.artima.com/cppsource/pure_virtual.html
-
Schwierig zu generieren... das ist eine ganze Multithreaded-Umgebung mit Sockets und diversen anderen Spielzeugen...
Ich versuch mal, ob ich ein SingleThreaded-Minimalbeispiel extrahiert bekomme.
-
Im Konstruktor der Basisklasse erzeuge ich mit beginthreadex einen Thread, in dessen "Run-Funktion" das Event praktisch sofort aufgerufen wird.
Kann es sein, dass es daran liegt, dass dort das Objekt noch nicht komplett konstruiert ist?
-
Problem erkannt

Klarer Fall von Schlamperei in der Konzeption der Klasse
