Hilfe: Linker Error
-
Hi Leute,
Ich habe Visual Studio 2008 und bekomme beim erstellen eines Projektes einen Linker-Error, den ich mir nicht erklären kann. Da ich meiner Ansicht nach mehrmals praktisch das gleiche mache gehe ich inzwischen davon aus, dass es vielleicht am Visual Studio liegt.
Also mal in Auszügen:
Datei dfMain.cpp
#include "dfIncludes.h" dfFrame* mainFrame; dfGraphics* graphic; dfIO* ioStruct; //... int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow) { //... graphic = new dfGraphics("bla","bla"); mainFrame = new dfFrame(1.0f, -1.0f, 1.0f,-1.0f); ioStruct = new dfIO; //... }
Datei dfIncludes.h
#ifndef DF_INCLUDES_H #define DF_INCLUDES_H #include <windows.h> //... class dfFrame; class dfGraphics; class dfIO; //... extern dfFrame* mainFrame; extern dfGraphics* graphic; extern dfIO* ioStruct; //... #include "dfFrame.h" #include "dfGraphics.h" #include "dfIO.h" //... #endif
Datei dfFrame.h
#ifndef DF_FRAME_H #define DF_FRAME_H #include "dfIncludes.h" class dfFrame { private: //... public: dfFrame(float, float, float, float); //... void klick(float, float); //... }; #endif
Datei dfGraphics.h
#ifndef DF_GRAPHICS_H #define DF_GRAPHICS_H #include "dfIncludes.h" class dfGraphics { private: //... public: dfGraphics(char*, char*); //... void resize(uint, uint); //... }; #endif
Datei dfIO.h
#ifndef DF_IO_H #define DF_IO_H #include "dfIncludes.h" class dfIO { private: //... public: //... static LRESULT CALLBACK wndProc_Main(HWND, UINT, WPARAM, LPARAM); }; #endif
In der CALLBACK-Funktion wird
mainFrame->klick(fx, fy);
und
graphic->resize(nx, ny)
aufgerufen.
Die Zeile mainFrame->klick() führt zu einem Linker-Error:1>dfIO.obj : error LNK2001: unresolved external symbol "class dfFrame * mainFrame" (?mainFrame@@3PAVdfFrame@@A)
kommentiere ich diese Zeile aus, so funktioniert alles!
Die Konstruktoren und Funktionen sind in einzelnen Dateien für jede Klasse definiert. Ich verstehe nicht, warum der Linker wegen "mainFrame" meckert und zu "graphic" nichts sagt...
Ich habe mich bemüht nur das notwendigste hier zu posten, da das Projekt inzwischen recht umfangreich ist. Wenn jemand noch mehr code braucht, dann kann ich den natürlich gerne noch posten.
Kann mir da vielleicht jemand weiter helfen?Vielen Dank!
Grüße,
dz
-
Moin,
schau mal hier:
http://msdn.microsoft.com/de-de/library/f6xx1b1z(v=VS.80).aspx
http://support.microsoft.com/kb/291952/deGruß
Klaus
-
Hey,
Danke für die Antwort!
Habe alle Lösungsvorschläge beim ersten Link einmal durchprobiert, es ändert sich aber leider nichts - nur wenn ich die Standardlibraries manuell einbinde, bekomme ich zusätzlich noch eine Warnung wegen Kombatibilitätsproblemen...
Der zweite Link hilft mir leider auch nicht weiter, da das dortige Problem nur der falsche Einstiegspunkt ins Programm ist - main - bzw WinMain wird bei mir aber richtig verlinkt.
Ich würde mich über weitere Hilfestellungen freuen - bin schon ne ganze weile an dem ProbemViele grüße,
dz
-
Ist dfMain überhaupt Teil Deines Projektes?
Wenn er das definierte Symbol nicht findet wird diese Modul evtl. gar nicht gelinkt.
-
Dann müsste er sich auch über
graphic
beschweren.
-
Bashar schrieb:
Dann müsste er sich auch über
graphic
beschweren.Warum. Das andere Symbol liegt im gleichen Modul... die Frage wäre was er zuerst versucht aufzulösen.
-
Wegen ...
dz schrieb:
In der CALLBACK-Funktion wird
mainFrame->klick(fx, fy);
und
graphic->resize(nx, ny)
aufgerufen.
Die Zeile mainFrame->klick() führt zu einem Linker-Error:1>dfIO.obj : error LNK2001: unresolved external symbol "class dfFrame * mainFrame" (?mainFrame@@3PAVdfFrame@@A)
kommentiere ich diese Zeile aus, so funktioniert alles!