Undefined Reference
-
Servus,
ich habe das Problem das mein Compiler ständig Undefined Reference meldet, woran liegt das?Hier mein Code(verkürzt):
//DirectDraw7.h #include <windows.h> #include <stdexcept> #include <string.h> #include "Dictionary.h" #include "d:\Microsoft DirectX SDK\Include\ddraw.h" class DirectDraw7 { private: LPDIRECTDRAW7 m_lpDDraw7; LPDIRECTDRAWCLIPPER m_lpClipper; Dictionary<int,LPDIRECTDRAWSURFACE7> m_surfDict; public: ... void LoadBitmap(const unsigned int&,const LPCSTR); }; //DirectDraw7.cpp void DirectDraw7::LoadBitmap(const unsigned int& id,const LPCSTR lpFilename) { HBITMAP hbm=(HBITMAP)LoadImage(0,lpFilename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); if(!hbm) { std::string lpcstr="Could not load the bitmap from file: "; lpcstr+=lpFilename; throw((runtime_error)lpcstr); } BITMAP bm; //Hier kommt der Fehler GetObject(hbm,sizeof(bm),&bm); E:\C++\DirectDraw7\DirectDraw7.cpp|67|undefined reference to `_GetObjectA@12'| ... }
-
#include "d:\Microsoft DirectX SDK\Include\ddraw.h"wahrscheinlich...
-
GuardianOfLife schrieb:
ich habe das Problem das mein Compiler ständig Undefined Reference meldet,
Das klingt nach einer Fehlermeldung, die der Linker ausspucken würde.
GuardianOfLife schrieb:
//DirectDraw7.h #include <windows.h> #include <stdexcept> #include <string.h> #include "Dictionary.h" #include "d:\Microsoft DirectX SDK\Include\ddraw.h"Ihhh.
Wozu gibt es denn Include-Pfade?
Backslashes würde ich auch vermeiden.Hast Du denn auch daran gedacht, gegen die DirectX7 Bibliothek "zu linken"? Das Inkludieren einer Headerdatei alleine reicht da nicht.
Gruß,
SP
-
Also wenn du meinst ob ich die Bibliotheken hinzugefügt hab, dann ja.
-
Aha. Ich habe die Fehlermeldung gerade entdeckt. Sie war in Deinem Quellcode mit versteckt:
E:\C++\DirectDraw7\DirectDraw7.cpp|67|undefined reference to_GetObjectA@12'`Das ist definitiv eine Fehlermeldung des Linkers. Sprich, Du sagst dem Compiler an irgend einer Stelle (vielleicht in einer Header-Datei), dass es eine Funktion namens
GetObjectgibt. Du rufst Die Funktion auch munter auf. Das Problem ist, dass der Linker diese Funktion nirgends findet. Wo sie definiert ist, müsstest Du selbst wissen (das kann eine Bibliothek sein oder eine Übersetzungseinheit aus Deinem Programm). Was ein Linker ist, und was der Unterschied zwischen Compiler und Linker ist, solltest Du mal nachlesen.Gruß,
SP
-
Ich glaube ich habe alles eingefügt was nötig ist. GetObject ist soweit ich weiß in <windows.h> definiert. Btw die link libraries sind auch eingefügt dxguid und ddraw.
-
wingdi.h ?
gdi32.lib ???
-
Hab ich noch nie in meinen Projekten gebraucht, und da hab ich auch GetObject und andere benutzt.
Hilft es wenn ich sage das ich ein Objekt hab das Templates benutzt? Weil ich vorhin damit Probleme hatte.
-
Ok?! Kann mir das jemand erklären meine Projekte funktionierten alle normal auch als ich die Bibliothek gdi32 nicht inkludiert hatte. Jetzt hab ich die Funktionen GetObject und andere außerhalb von main.cpp benutzt und ich erhielt ein Fehler.
Warum musste ich auf einmal die Bibliothek gdi32 inkludieren?
-
Ich weiß nicht, wie es den anderen geht, aber ich finde Deine Problembeschreibung sehr schlecht. Du musst Dir damit schon mehr Mühe geben und ein paar Details rausrücken. Ich kenne
GetObjectnicht, weiß nicht, was das für eine Funktion sein soll, wo sie definiert ist, wo sie benutzt wird, etc etc etc. Du hingegen müsstest das wissen.Mit dem jetzigen Informationsstand kann ich nicht anderes, als mich zu wiederholen: Dein Linker findet die Funktion nicht. Tue was dagegen. Die notwendige Maßnahme hängt davon ab, was/wo/wie
GetObjectist.Gruß,
SP
-
Sebastian Pizer schrieb:
Backslashes würde ich auch vermeiden.
Dein Rat wurde wahrscheinlich nicht befolgt. Deshalb nochmals:
Backslashes in Stringliteralen müssen durch eine eigene Escapesequenz
'\\'gekennzeichnet werden. In Pfaden verwendet man allerdings besser den Slash'/'.Sebastian Pizer schrieb:
Ich weiß nicht, wie es den anderen geht, aber ich finde Deine Problembeschreibung sehr schlecht. Du musst Dir damit schon mehr Mühe geben und ein paar Details rausrücken.
GuardianOfLife ist gerne etwas ungenau, hier habe ich ihn mit der ersten Antwort auf sein Problem hingewiesen, das er aber scheinbar nicht wahrhaben wollte.
GuardianOfLife, du solltest die Antworten wirklich genauer lesen und versuchen, dich in die Helfer hineinzuversetzen. Mit keinen oder sogar falschen Informationen versorgt zu werden, ist nicht besonders hilfreich.