Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Bolle52 Mini JLI'ler
Anmeldedatum: 13.07.2007 Beiträge: 24
Medaillen: Keine
|
Verfasst am: 26.12.2007, 18:20 Titel: Compiler-fehler |
|
|
hi @ all und fröhliche restweihnachten,
wenn ich eine instanz setze tritt ein fehler auf mit dem ich nichts anfangen kann
Code: |
Linking...
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall CSprite::CSprite(void)" (??0CSprite@@QAE@XZ) referenced in function "void __cdecl `dynamic initializer for 'Sprite''(void)" (??__ESprite@@YAXXZ)
1>main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall CSprite::~CSprite(void)" (??1CSprite@@UAE@XZ) referenced in function "void __cdecl `dynamic atexit destructor for 'Sprite''(void)" (??__FSprite@@YAXXZ)
|
wenn ihr quellcode braucht einfach nur bescheid sagen.
mfg bolle |
|
Nach oben |
|
|
Loigie Junior JLI'ler
Anmeldedatum: 29.06.2004 Beiträge: 52 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 26.12.2007, 18:42 Titel: |
|
|
Also die MSDN sagt dazu:
[url=http://msdn2.microsoft.com/de-de/library/799kze2z(VS.80).aspx]LNK2019[/url]
Könnte es sein das die deklaration des Konstrucktors der Klasse CSprite fehlt oder so etwas? |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 26.12.2007, 18:57 Titel: |
|
|
eher die Implementation. Ich bin mir nicht sicher, aber scheinbar erstellt er automatisch einen Con- und Destructor, bzw. würde aber es klappt irgendwie net.
Zeig mal deine Klasse. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Bolle52 Mini JLI'ler
Anmeldedatum: 13.07.2007 Beiträge: 24
Medaillen: Keine
|
Verfasst am: 26.12.2007, 20:03 Titel: |
|
|
habe den fehler behoben. hatte vergessen folgendes in meine klasse zu schreiben
CPP: | CSprite::CSprite(void)
{
m_lpSprite = NULL;
m_lpTexture = NULL;
}
CSprite::~CSprite(void)
{
if(NULL != m_lpSprite)
{
m_lpSprite->Release();
m_lpSprite = NULL;
}
if(NULL != m_lpTexture)
{
m_lpTexture->Release();
m_lpTexture = NULL;
}
} |
|
|
Nach oben |
|
|
Deviloper Junior JLI'ler
Anmeldedatum: 31.05.2006 Beiträge: 77
Medaillen: Keine
|
Verfasst am: 26.12.2007, 21:14 Titel: |
|
|
Hmm aber mach es dir doch ein wenig einfacher ... schreib dir einmal ein Funktionstemplate:
CPP: | template <typename Type>
void safe_release(T* data)
{
if (data == NULL) return;
data->Release()
data = NULL;
} |
Und dann nutzt du noch sog. Initialisierungslisten:
CPP: | CSprite::CSprite()
: m_lpSprite(NULL), m_lpTexture(NULL)
{} |
Und im Destruktor dein neues Template:
CPP: | CSprite::~CSprite()
{
safe_release(m_lpSprite);
safe_release(m_lpTexture);
} | und fertig
Die Initialisierungslisten zeigen bei Zeigern nicht ihre Vorteile, aber ließ dich dazu ein wenig ein, dann weißt du warum die gut sind
Und safe_release ist doch wesentlich selbsterklärender als eine if (NULL != ... -Konstruktion! |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 26.12.2007, 22:34 Titel: |
|
|
Deviloper hat Folgendes geschrieben: |
CPP: | template <typename Type>
void safe_release(T* data)
{
if (data == NULL) return;
data->Release()
data = NULL;
} |
|
Müsste man nicht eine Referenz auf einen Zeiger übergeben? Ansonsten wird doch nur die lokale Kopie des Zeigers auf 0 gesetzt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Bolle52 Mini JLI'ler
Anmeldedatum: 13.07.2007 Beiträge: 24
Medaillen: Keine
|
Verfasst am: 26.12.2007, 22:37 Titel: |
|
|
@Deviloper
danke für den tipp.
habe leider wieder ein prob. wenn ich vom debug auf release wechsle, dann habe ich zig fehlermeldungen, wenn ich das prog. compiliere.
hier die fehlermeldungen:
Code: |
1>Linking...
1>Direct3D.obj : error LNK2019: unresolved external symbol _D3DXSaveSurfaceToFileA@20 referenced in function "public: void __thiscall CDirect3D::CreateScreenShot(char const *)" (?CreateScreenShot@CDirect3D@@QAEXPBD@Z)
1>Direct3D.obj : error LNK2019: unresolved external symbol _D3DXLoadSurfaceFromFileA@32 referenced in function "public: void __thiscall CDirect3D::Scroll(void)" (?Scroll@CDirect3D@@QAEXXZ)
1>Direct3D.obj : error LNK2019: unresolved external symbol _D3DXCreateTextureFromFileExA@56 referenced in function "public: void __thiscall CDirect3D::DrawSurface(char *,int,int)" (?DrawSurface@CDirect3D@@QAEXPADHH@Z)
1>Sprite.obj : error LNK2001: unresolved external symbol _D3DXCreateTextureFromFileExA@56
1>Direct3D.obj : error LNK2019: unresolved external symbol _D3DXGetImageInfoFromFileA@8 referenced in function "public: void __thiscall CDirect3D::DrawSurface(char *,int,int)" (?DrawSurface@CDirect3D@@QAEXPADHH@Z)
1>Sprite.obj : error LNK2001: unresolved external symbol _D3DXGetImageInfoFromFileA@8
1>Direct3D.obj : error LNK2019: unresolved external symbol _D3DXCreateFontIndirectA@12 referenced in function "protected: void __thiscall CDirect3D::CreateFontA(void)" (?CreateFontA@CDirect3D@@IAEXXZ)
1>Direct3D.obj : error LNK2019: unresolved external symbol _DXGetErrorDescription9A@4 referenced in function "public: int __thiscall CDirect3D::Init(struct HWND__ *,int)" (?Init@CDirect3D@@QAEHPAUHWND__@@H@Z)
1>Direct3D.obj : error LNK2019: unresolved external symbol _Direct3DCreate9@4 referenced in function "public: int __thiscall CDirect3D::Init(struct HWND__ *,int)" (?Init@CDirect3D@@QAEHPAUHWND__@@H@Z)
1>Sprite.obj : error LNK2019: unresolved external symbol _D3DXCreateSprite@8 referenced in function "public: void __thiscall CSprite::Create(struct IDirect3DDevice9 *,char const *)" (?Create@CSprite@@QAEXPAUIDirect3DDevice9@@PBD@Z)
1>Sprite.obj : error LNK2019: unresolved external symbol _D3DXMatrixTransformation2D@28 referenced in function "public: void __thiscall CSprite::Draw(void)" (?Draw@CSprite@@QAEXXZ) |
|
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 26.12.2007, 23:17 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | Deviloper hat Folgendes geschrieben: |
CPP: | template <typename Type>
void safe_release(T* data)
{
if (data == NULL) return;
data->Release()
data = NULL;
} |
|
Müsste man nicht eine Referenz auf einen Zeiger übergeben? Ansonsten wird doch nur die lokale Kopie des Zeigers auf 0 gesetzt. |
ja das stimmt:
CPP: | template<typename T> inline void safeRelease( T*& apData )
{
if( apData )
{
apData->Release();
apData = 0;
}
} |
@bolle52:
du musst alle zusätzlichen libraries auch bei der release-konfiguration angeben, nicht nur bei debug. Bei manchen libs (die die auf ~d.lib enden) solltest du dann auch das d wegmachen, da es keine debug builds sind.
Gruß DXer |
|
Nach oben |
|
|
Deviloper Junior JLI'ler
Anmeldedatum: 31.05.2006 Beiträge: 77
Medaillen: Keine
|
Verfasst am: 27.12.2007, 00:14 Titel: |
|
|
Hmm ja habt recht ... hab da nur vorhin Probleme mit gehabt als ich es (ich verwende das Template selbst auch) bei mir umgestellt hab und hatte noch keine Zeit zu kontrollieren woran es liegt und hab deswegen vorsichtshalber erstere Variante einfach genommen |
|
Nach oben |
|
|
|