implementieren, aber wie ??
-
Moin, Moin,
schlage mich mal wieder mit dem Problem der 'gegenseitigen Implementierung' herum, und mich würde doch stark interessieren, mit welchem Konstrukt dies in C++ am elegantesten gelöst werden kann.Das Umfeld:
Habe eine Socket Klasse, die alle Basicservices für einen Telnetserver bereitstellt. Des Weiteren eine Connection Klasse, die eine Verbindung zu einem Client handelt und daher die Socket Klasse implementiert. Im Hauptprogramm werden Threads erzeugt, die jeweils mit Hilfe eines Connection-Objekts die Client-Verbindungen bearbeiten.Das Problem:
Das Hauprprogramm startet nun den Server und ruft eine Funktion der Server-Klasse auf, die eine Verbindung akzeptiert und als Parameter ein Connection-Objekt bekommt, um die spezifischen Verbindungsdaten gleich im richtigen Objekt abzulegen.
Dazu muss die Server Klasse aber die Connection-Klasse implementieren !!
Und hier 'beißt sich die Katze in den Schwanz'. Jede Klasse ist mit einem Schutz gegen Mehrfachdeklaration versehen. Die Server Klasse 'sieht' die
Connection Klasse einfach nicht.Wer kann mir einen Tip geben, wie ich mit dem Dilemma umgehen kann? Bin für jede Hilfe dankbar.
Hoffentlich bis bald ...
arni
-
forward deklarationen
class connection; class socket { //... public: //... void blub(const connection &obj); }; class connection { //... };
-
Hai kingruedi,
müssen dann beide Klassen in einer Header Datei deklariert werden?
Im Moment bekomme ich bei einer Forward Deklaration die Fehlermeldung"TelnetSocket.cpp
c:\telnet\telnetsocket.cpp(47) : error C2027: Verwendung des undefinierten Typs "TelnetConnect"
c:\telnet\telnetsocket.h(10) : Siehe Deklaration von 'TelnetConnect' "In der Zeile 10 steht die Forward Deklaration.
Danke für die schnelle Hilfe.
arni
-
habe mir die Antwort gerade selber gegeben. wenn die beiden Klassen in einem Header file stehen, dann isses Bingo und der compiler macht seine Arbeit ohne zu meckern.
Eine andere Möglichkeit gibts wohl nicht?
Ich meine mit einem Namespace oder einem Typedef, 'nem void* zeiger und einem Cast (meine anderen Versuche, die bislang frustran waren)?
Danke arni