Headerdatei wie korrekt einbinden?
-
Hallo,
ich beschäftige mich seit kurzem wieder mit der MFC und habe vor ein Chatprogramm für LAN bzw. auch das Internet zu schreiben, das Netzwerkprogramm soll erst einmal nur einfache Funktionen beherrschen da ich dadurch auch erst die Netzwerkprogrammierung erlernen möchte.
Mein Problem ist nun, das ich die Header Dateien nicht korrekt eingebunden bekomme:
In der Headerdatei DataClasses.h befinden sich 3 Klassen:
- UserData(speichert Daten wie Name, IP, etc. eines Benutzers auf dem Server)
- ServerOptions(speichert die Servereinstellungen wie z.B. das Passwort)
- UserNetSocket(abgeleitet von CAsyncSocket)
Weiterhin hab ich dann mein Dialogfeld und meine Anwendung, d.h. ChatServer.cpp, ChatServer.h, ChatServerDlg.cpp und ChatServerDlg.h.
Da ich in der Datei ChatServerDlg.h Instanzen der oben genannten Klassen erstelle, includiere ich dort die Datei DataClasses.h. Das Problem ist nun, das sowohl ChatServerDlg.cpp als auch ChatServer.cpp die Datei ChatServerDlg.h includieren, und sie auch wirklich brauchen.
Wenn ich das ganze jetzt kompiliere, meckert er halt rum dass einige Funktionen/Klassen schonmal definiert worden sind! Der Fehler ist dabei genau der :ChatServerDlg.obj : error LNK2005: "public: __thiscall ServerOptions::ServerOptions(void)" (??0ServerOptions@@QAE@XZ) bereits in ChatServer.obj definiert Debug/ChatServer.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefundenMeine Frage ist jetzt einfach : Wie muss ich die Headerdatei aufbauen/verwalten/includieren lassen, damit alles funktioniert?
THX
Philipp
-
Ist der Konstruktor von ServerOptions zufällig eine nicht-inline Memberfunktion, die trotzdem im Header definiert ist?
-
Ja, ist sie...
Muss ich dafür ne extra .cpp Datei erstellen?
-
Zum Beispiel. Wie du das machst, bleibt dir überlassen. Jedenfalls wird die Funktion, wenn sie in einem Header steht, der in mehreren .cpp Files eingebunden wird, am Ende auch in mehreren .obj Files vorkommen, und daran stößt sich der Linker. Entweder du machst sie inline, oder du sorgst dafür, dass es die Funktionsdefinition nur einmal im ganzen Projekt gibt.
-
Cool, supervielen Dank für die schnelle Hilfe, klappt im Moment alles wunderbar

Philipp