Linker-fehler
-
Moin moin und frohe Weihnachten!
Ich habe ein kleines Problem mit meinem Programm.
In der main.cpp habe ich ziehmlich viele funktionen stehen, die einzelne Fenster erstellen.Das ganze wurde mir zu unübersichtlich und ich habe versucht, einfach eine neue .cpp-datei zu erstellen und einen teil der funktionen da rein zu schreiben.
jetzt habe ich folgende dateien:
resource.h
-----------
main.cpp
dialoge.cppIn der main.cpp habe ich die dialoge.cpp mit #inlclude "dialoge.cpp" includiert.
Der einzigste Quelltext, der jetzt noch in der dialoge.cpp ist sieht so aus :
BOOL WINAPI rechner(HWND hDlg, unsigned msg, WPARAM wP, LPARAM lP) { switch(msg) { case WM_COMMAND: switch(LOWORD(wP)) { case ID_OK: ausrechnen(hDlg); return true; case IDC_ZEICHNEN: zeichnen(hDlg); return true; } } return false; }folgender fehler kommt beim kompilieren:
Die Zwischen- und Ausgabedateien für das Projekt "PhysikMathe" mit der Konfiguration "Debug|Win32" werden gelöscht.
Kompilieren...
dialoge.cpp
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI'
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'rechner'
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C2065: 'HWND': nichtdeklarierter Bezeichner
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'hDlg'
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(1) : error C2059: Syntaxfehler: ')'
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(2) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(2) : error C2447: '{': Funktionskopf fehlt - Parameterliste im alten Stil?
main.cpp
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(9) : error C3861: "ausrechnen": Bezeichner wurde nicht gefunden.
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\dialoge.cpp(12) : error C3861: "zeichnen": Bezeichner wurde nicht gefunden.
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\main.cpp(36) : error C2365: "ausrechnen": Erneute Definition; vorherige Definition war "Ehemals unbekannter Bezeichner".
c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\physikmathe\physikmathe\main.cpp(54) : error C2365: "zeichnen": Erneute Definition; vorherige Definition war "Ehemals unbekannter Bezeichner".
Code wird generiert...
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Admin\Eigene Dateien\Visual Studio 2005\Projects\Debug\BuildLog.htm" gespeichert.
PhysikMathe - 14 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========Versucht habe ich auch, in der dialoge.cpp die main.cpp zu includieren.. ohne erfolg

Wie man sieht, habe ich nicht die geringste ahnung davon, wie das ganze funktionieren soll
Kann mir jemand sagen, was ich falsch mache und wie man es richtig machen muss ?
Danke schonmal...
Wiesel~
-
Hast du denn irgendwas in die dialoge.cpp includiert?
Da müsste zumindest windows.h includiert werden.
Wenn du das als Projekt compilierst brauchst du meines Wissens nach nicht extra die *.cpp in die maindatei includieren.Wenn du die Funktionen ausrechnen und zeichnen in der Prozedur deines Dialogs ausruft, muss der Dialog die auch kennen. Versuch mal bitte, die Prototypen dieser Funktionen in die dialoge.cpp zu schreiben. Denn offensichtlich kennt die Prozedur die nicht.
Mit weihnachtlichen Grüßen
Moadeh :xmas1:
-
Danke für die hilfe !
Es funktioniert jetzt . Ich habe die windows.h und die resource.h eingebunden und dannach, wie du schon gesagt hast, einfach die funktionen deklariert.Jedoch habe ich jetzt ein anderes Problem.Ich habe jetzt 3 .cpp dateien.
main.cpp, function.cpp und dialoge.cpp.
In der main.cpp habe ich das hier deklariert :HWND hWnd = NULL; HWND hWndMainWindow; HINSTANCE hInst;In der functions.cpp brauche ich jedoch genau die selben Variablen.
Wenn ich sie dort wieder deklariere, kommt folgender fehler:Verknüpfen...
functions.obj : error LNK2005: "struct HINSTANCE__ * hInst" (?hInst@@3PAUHINSTANCE__@@A) ist bereits in main.obj definiert.
functions.obj : error LNK2005: "struct HWND__ * hWndMainWindow" (?hWndMainWindow@@3PAUHWND__@@A) ist bereits in main.obj definiert.
functions.obj : error LNK2005: "struct HWND__ * hWnd" (?hWnd@@3PAUHWND__@@A) ist bereits in main.obj definiert.
C:\Dokumente und Einstellungen\Admin\Eigene Dateien\Visual Studio 2005\Projects\PhysikMathe\Debug\PhysikMathe.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Admin\Eigene Dateien\Visual Studio 2005\Projects\PhysikMathe\PhysikMathe\Debug\BuildLog.htm" gespeichert.Ich brauche die Variable in den 2 dateien, aber es kommen immer diese fehler.

Hat jemand eine idee, was ich falsch mache und was ich machen sollte/muss ? :xmas1:
-
schreib in die zweite cpp datei
extern HWND hWnd = NULL; extern HWND hWndMainWindow; extern HINSTANCE hInst;Das sagt deinem Compiler das die Variablen schonmal in einer anderen Datei definiert wurden.
-
Wenn du die Funktionen aufrufst kannst du doch Parameter mitschicken.
Prototyp:
void beispielsfunktion(HWND, HWND, HINSTANCE);Aufruf:
beispielfunktion(hWnd, hWndMainWindow, hInst);Funktionselbst:
void beispielfunktion(HWND hWnd, HWND hWndMainWindow, HINSTANCE hInst) { }
-
ich glaube, du meinst etwas anderes. Es ging mir nur um die variablen und wenn diese nicht da sind, kann ich ja auch keine funktion mit den variablen aufrufen

Ich habe jetzt die variable in der einen datei normal deklariert und in der anderen als
extern HWND hWnd
-
Falls es dich noch interessiert es geht auch noch anderes.
Ich mach es so das ich sämtliche Funktionen und Funktionen.h schreiben und diese datei in die main datei includiere.
Das geht auch bei mehreren Fenstern (z.B. window_1.h) und du hast nicht den stress alles doppelt zu includieren.
Natrürlich musst du die Fenster header nach der Funktion header aufrufen,
damit du die Funktionen nutzen kannst.mfg