JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9fd3961ec61d792a995be18664fb5702Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Compiler-fehler

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Bolle52
Mini JLI'ler



Anmeldedatum: 13.07.2007
Beiträge: 24

Medaillen: Keine

BeitragVerfasst am: 26.12.2007, 19:20    Titel: Compiler-fehler Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Loigie
Junior JLI'ler



Anmeldedatum: 29.06.2004
Beiträge: 52
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 26.12.2007, 19:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 26.12.2007, 19:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Bolle52
Mini JLI'ler



Anmeldedatum: 13.07.2007
Beiträge: 24

Medaillen: Keine

BeitragVerfasst am: 26.12.2007, 21:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Deviloper
Junior JLI'ler



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 26.12.2007, 22:14    Titel: Antworten mit Zitat

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 Smile
Die Initialisierungslisten zeigen bei Zeigern nicht ihre Vorteile, aber ließ dich dazu ein wenig ein, dann weißt du warum die gut sind Smile

Und safe_release ist doch wesentlich selbsterklärender als eine if (NULL != ... -Konstruktion!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 26.12.2007, 23:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Bolle52
Mini JLI'ler



Anmeldedatum: 13.07.2007
Beiträge: 24

Medaillen: Keine

BeitragVerfasst am: 26.12.2007, 23:37    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 27.12.2007, 00:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Deviloper
Junior JLI'ler



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 27.12.2007, 01:14    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum