Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[C++] Error LNK2001 bij linken programma

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met de hulp van het boek 'games programmeren in 24 uur' een programma te schrijven met een kleine enige erbij. Na foutjes te hebben weggewerkt dook bij het linken deze fout op:

error LNK2001: unresolved external symbol "protected: static class GameEnige * GameEnige::mpGameEnige" (?mpGameEnige@GameEnige@@1PAV1@A

Nu heb ik geen flauw idee wat er mis is, en de msdn site maakte het ook niet makkelijker. Een van de mogelijkheden was dat ik verschillende versies van een library door elkaar probeer te gebruiken, volgensmij doe ik dat niet.

Ik gebruik VC++ en hier is de code van de class:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class GameEnige
{
protected:
    static GameEnige* mpGameEnige;
    HINSTANCE mhInstance;
    HWND mhWindow;
    TCHAR mszWindowClass[32], mszTitle[32];
    WORD mwIcon, mwSmallIcon;
    int miWidth, miHeight, miFrameDelay;
    BOOL mbSleep;

public:
    GameEnige (HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth = 640, int iHeight = 480);
    virtual ~GameEnige();

    static GameEnige* GetEnige(){ return mpGameEnige; };
    BOOL Initialize(int iCmdShow);
    LRESULT HandleEvent(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam);

    HINSTANCE GetInstance(){ return mhInstance; };
    HWND GetWindow(){ return mhWindow; };
    void SetWindow(HWND hWindow){ mhWindow = hWindow; };
    LPTSTR GetTitle(){ return mszTitle; };
    WORD GetIcon(){ return mwIcon; };
    WORD GetSmallIcon(){ return mwSmallIcon; };
    int GetWidth(){ return miWidth; };
    int GetHeight(){ return miHeight; };
    int GetFrameDelay(){ return miFrameDelay; };
    void SetFrameRate(int iFrameRate){ miFrameDelay = 1000 / iFrameRate; };
    BOOL GetSleep(){ return mbSleep; };
    void SetSleep(BOOL bSleep){ mbSleep = bSleep; }
};

  • remco_k
  • Registratie: April 2002
  • Laatst online: 16:54

remco_k

een cassettebandje was genoeg

Verwijderd schreef op zaterdag 25 oktober 2008 @ 09:19:
error LNK2001: unresolved external symbol "protected: static class GameEnige * GameEnige::mpGameEnige" (?mpGameEnige@GameEnige@@1PAV1@A
unresolved external betekend dat je alleen de declaratie van een functie hebt maar niet de implementatie van de functie zelf.
Hetzij in je eigen C++ code, in een .lib of .obj file.
Je hebt dus een functie gedeclareerd waarvan de werkelijke implementatie ontbreekt.
Ik weet niet of er een .lib file bij die GameEnige hoort, misschien moet je die gewoon even includen in je project.

[ Voor 12% gewijzigd door remco_k op 25-10-2008 09:37 ]

Alles kan stuk.


Verwijderd

Topicstarter
Ik was vergeten een header file te includen 8)7 Bedankt! Ik zat heel ingewikkeld te doen maar ik was dat dus gewoon vergeten |:(

  • remco_k
  • Registratie: April 2002
  • Laatst online: 16:54

remco_k

een cassettebandje was genoeg

Mooi!
Andere vraag; wat is een GameEnige ?
Een GameEngine ken ik.... Maar dit?

Alles kan stuk.


Verwijderd

Topicstarter
Code waarmee de standaard taken worden gescheiden van de specifieke taken. De bedoeling is dan dat je de enige met die standaard taken overal weer in kunt gebruiken. Dit is niet de hele enige, dit is alleen maar de declaratie van de klasse die erbij hoort :)

  • remco_k
  • Registratie: April 2002
  • Laatst online: 16:54

remco_k

een cassettebandje was genoeg

Ah, het is dus niets meer en minder dan een klasse.
Ik blijf het wel een merkwaardig woord vinden. Ergens een linkje over?

Alles kan stuk.


Verwijderd

Topicstarter
omg lols :P Ik bedoel ook engine, oh had ik helemaal niet gezien xd

  • remco_k
  • Registratie: April 2002
  • Laatst online: 16:54

remco_k

een cassettebandje was genoeg

Verwijderd schreef op zaterdag 25 oktober 2008 @ 09:59:
omg lols :P Ik bedoel ook engine, oh had ik helemaal niet gezien xd
Ghehe... oke, duidelijk :X :)

Alles kan stuk.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14-11 23:57

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wel mooi dat je het dan iig consistent fout doet :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15:54
Ben trouwens wel benieuwd hoe die constructie in elkaar zit als je met het includen van een header de definitie van een een static variabele meeneemt.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

.oisyn schreef op zaterdag 25 oktober 2008 @ 18:14:
Wel mooi dat je het dan iig consistent fout doet :P
Intellisense ftl gok ik ;)

Professionele website nodig?


  • remco_k
  • Registratie: April 2002
  • Laatst online: 16:54

remco_k

een cassettebandje was genoeg

.oisyn schreef op zaterdag 25 oktober 2008 @ 18:14:
Wel mooi dat je het dan iig consistent fout doet :P
Ik heb dat ook weleens, maak ik een klasse voor één of ander. Geef het ding een duidelijke en natuurlijk fancy naam.
Kom ik er bij de 3e applicatie die die klasse gebruikt achter dat er een stomme typo inzit.
Ik noem maar wat: TReportGenenator --> TReportGenerator.
Aangezien ik lui ben en altijd klasse namen in shortcuts of clipboard heb zitten, merk je dat niet zo snel ook. :P

Alles kan stuk.


  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Rename je class zodat er geen typo meer in zit. Dan aan het einde van die headerfile een typedef van de goede naar de foute naam, zodat je huidige code niet breekt :)

Dan kan je het in elk geval vanaf dat punt goed doen :P

-niks-


  • remco_k
  • Registratie: April 2002
  • Laatst online: 16:54

remco_k

een cassettebandje was genoeg

MLM schreef op zondag 26 oktober 2008 @ 11:40:
Rename je class zodat er geen typo meer in zit. Dan aan het einde van die headerfile een typedef van de goede naar de foute naam, zodat je huidige code niet breekt :)

Dan kan je het in elk geval vanaf dat punt goed doen :P
I know, maar dan ben ik toch nog van de echte oplossing; renamen, geen typedef en gewoon alle applicaties aanpassen.
Gelukkig komt het niet vaak voor. :P

Alles kan stuk.

Pagina: 1