Multiple define von einer Funktion, hä ?
-
Hi Leute,
schreibe gerade so bisl an einem Programm aber bin auf ein Problem gestossen. Und zwar habe ich eine Datei namens "GUIMaintainer.h" und eine entsprechende .cpp. Die .h hat eigentlich include-guards oder wie man sie nennt und die .cpp included die .h datei entsprechend.
Dann will ich in der main-datei die .cpp includen, bekomme aber die Fehlermeldung, dass "GuiMaintainer::createLogion()" mehrfach definiert wurde. Ist sie aber nicht ;OKurz die 2 Codes :
#ifndef _GUIMAINTAINER_H #define _GUIMAINTAINER_H #include <iostream> #include <windows.h> #include <vector> class GuiMaintainer { private : struct chatwindow { HANDLE mainWindow, input, output; }; std::vector < chatwindow > ChatWindowHandles; HWND hLoginHandles[5], hclientList[5]; HINSTANCE Inst; BOOL ChatActive; public : GuiMaintainer(HINSTANCE hInst) { Inst = hInst; ChatActive = FALSE; } BOOL createLogin(); BOOL createClientList(); BOOL createChatWindow(); void UpdateWindowOutput( char* text , HANDLE windowHandle ); }; #endifUnd die .cpp
#include "GUIMaintainer.h" LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); BOOL GuiMaintainer::createLogin() { char szClassname[] = "Login"; WNDCLASSEX windowClass; windowClass.hInstance = Inst; windowClass.lpszClassName = szClassname; windowClass.lpfnWndProc = WindowProcedure; /* This function is called by windows */ windowClass.style = CS_DBLCLKS; /* Catch double-clicks */ windowClass.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ windowClass.hIcon = LoadIcon (NULL, IDI_APPLICATION); windowClass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); windowClass.hCursor = LoadCursor (NULL, IDC_ARROW); windowClass.lpszMenuName = NULL; /* No menu */ windowClass.cbClsExtra = 0; /* No extra bytes after the window class */ windowClass.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ windowClass.hbrBackground = (HBRUSH) COLOR_BACKGROUND; if (!RegisterClassEx (&windowClass)) { MessageBox(NULL,"ERROR","ERROR",MB_OK); exit(1); } hLoginHandles[0] = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassname, /* Classname */ "Happy Chatting", /* Title Text */ WS_OVERLAPPED | WS_SYSMENU | WS_VISIBLE , /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 200, /* The programs width */ 400, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ Inst, /* Program Instance handler */ NULL /* No Window Creation data */ ); hLoginHandles[1] = CreateWindowEx ( 0, /* Extended possibilites for variation */ "edit", /* Classname */ "Input name here !", /* Title Text */ WS_VISIBLE | WS_CHILD , /* default window */ 30, /* Windows decides the position */ 30, /* where the window ends up on the screen */ 140, /* The programs width */ 20, /* and height in pixels */ hLoginHandles[0], /* The window is a child-window to desktop */ NULL, /* No menu */ Inst, /* Program Instance handler */ NULL /* No Window Creation data */ ); hLoginHandles[2] = CreateWindowEx ( 0, /* Extended possibilites for variation */ "edit", /* Classname */ "Input Ip-Adress here !", /* Title Text */ WS_VISIBLE | WS_CHILD , /* default window */ 30, /* Windows decides the position */ 60, /* where the window ends up on the screen */ 140, /* The programs width */ 20, /* and height in pixels */ hLoginHandles[0], /* The window is a child-window to desktop */ NULL, /* No menu */ Inst, /* Program Instance handler */ NULL /* No Window Creation data */ ); hLoginHandles[3] = CreateWindowEx ( 0, /* Extended possibilites for variation */ "edit", /* Classname */ "Input Port here !", /* Title Text */ WS_VISIBLE | WS_CHILD , /* default window */ 30, /* Windows decides the position */ 90, /* where the window ends up on the screen */ 140, /* The programs width */ 20, /* and height in pixels */ hLoginHandles[0], /* The window is a child-window to desktop */ NULL, /* No menu */ Inst, /* Program Instance handler */ NULL /* No Window Creation data */ ); hLoginHandles[4] = CreateWindowEx ( 0, /* Extended possibilites for variation */ "button", /* Classname */ "Connect", /* Title Text */ WS_VISIBLE | WS_CHILD , /* default window */ 50, /* Windows decides the position */ 150, /* where the window ends up on the screen */ 100, /* The programs width */ 30, /* and height in pixels */ hLoginHandles[0], /* The window is a child-window to desktop */ NULL, /* No menu */ Inst, /* Program Instance handler */ NULL /* No Window Creation data */ ); }Weiss echt nicht, was das Problem sein soll

-
Komisch schrieb:
Dann will ich in der main-datei die .cpp includen, bekomme aber die Fehlermeldung, dass "GuiMaintainer::createLogion()" mehrfach definiert wurde. Ist sie aber nicht ;O
Man includet ja auch keine .cpp Dateien, sondern nur die Header. Die .cpp wird für sich alleine compiliert und mit der main zusammengelinkt.
-
Dann will ich in der main-datei die .cpp includen
Man included keine .cpp's. Man included .h's! Der Rest ist Aufgabe des Linkers.
-
;O Tatsächlich ;P Vielen dank euch beiden ! Ich hab das einfach nur der Logik halber so gemacht ;P .cpp included .h und main dann die .cpp, die ja die entsprechende Definitionen ergo auch funktionierenden code bereitstellt. Wusste aber ehrlich nicht, wie der Compiler was linkt ;P Kommt davon, dass ich so solten mit verschiedenen Datein ( nennt sich Module ? ) arbeite

Nochmal danke und schönen Abend !
-
wie der Compiler was linkt
Gar nicht. Der Linker linkt - der Compiler kompiliert.
-
Komisch schrieb:
Kommt davon, dass ich so solten mit verschiedenen Datein ( nennt sich Module ? ) arbeite

Dann solltest du dich in die Thematik einlesen und sicher sein, wie man das macht. Wenn du es nicht genau weißt und einfach rumprobierst solltest du dich auch nicht über Fehler wundern
