Link error – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Link error – C / C++ – Fórum – Programujte.comLink error – C / C++ – Fórum – Programujte.com

 

max
~ Anonymní uživatel
40 příspěvků
9. 5. 2007   #1
-
0
-

Dobry den
Mam takovy problem
Naprogramoval sem si takovy jednoduchy game engin, obsahuje trydu, neake funkce a metody a ldyz ho potom includuju do jinyho projektu a ten zkompiluju (uz doptogramovany), nakonec to nahlasy chybu

[Linker error] undefined reference to `GameEngine::GameEngine(HINSTANCE__*, char*, int, int)'
[Linker error] undefined reference to `Bitmap::Bitmap(HDC__*, char*)'


a jeste par podobnych

delam to v dev-c++

prosim pomoc

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
9. 5. 2007   #2
-
0
-

To je sice krasne, ale nic jineho nez linker ti rict nemuzu - nevi kde ma najit definice tech uvedenych funkci - zkontroluj si jestli mas spravne pripojene knihovny. Kdyby to nepomohlo, dej sem aspon cast kodu.

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
9. 5. 2007   #3
-
0
-

Dik
Ja sem si to myslel, ale fakt nevim jaky knihovny mam pripojit
V zasade de o funkce vykreslovani, jako LoadImage, BitBlt, TransparentBlt atd...

Zitra sem ten kod hodim

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
9. 5. 2007   #4
-
0
-

Asi to bude v tom TransparentBlt

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
9. 5. 2007   #5
-
0
-

To max:
Jenze linker se zatim o API fce nezajima, hleda definice metod. Mimo vyse zminene knihovny se koukni i na to, zda mas spravne includovane vsechny soubory.

Nahlásit jako SPAM
IP: ...–
Pavel Vlašánek0
Návštěvník
11. 5. 2007   #6
-
0
-

Zvláštní, že jednoduchý engine který jsi "naprogramoval", odpovídá podle výpisu linkeru přesně enginu Michaela Morrisona z knihy "Naučte se programovat počítačové hry za 24 hodin". Celkově je tvůj dotaz položený dost vtipně, ale to teď není podstatné...

Otevři Projekt->Vlastnosti projektu->Parametry a k linkeru připiš
C:/Dev-Cpp/lib/libmsimg32.a nebo ( -lmsimg32)
C:/Dev-Cpp/lib/libwinmm.a nebo ( -lwinmm)

V souboru Bitmap.cpp (ha :)) napiš nad include - #define WINVER 0x0500. S tím to zkompiluj a pak už to WINVER nebudeš potřebovat (myslím že vyhodí warning), tak to klidně zakomentuj...


Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
11. 5. 2007   #7
-
0
-

No "trochu" je to podle te knihy
Dost mi pomohla a abych se uplne "neopicil" trochu sem si to upravil
Ale zase to nejede

Nejede mi ta metoda GetEngine co vraci ukazatel na tu tridu, taky to pise link error, undefined references to GameEngine::m_pGameEngine

Co s tim

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
11. 5. 2007   #8
-
0
-

Sem hrozna lama
Uz to opravuju dva dny a ten posledni link orror to hazi furt

Ale ta kniha je super

Nahlásit jako SPAM
IP: ...–
Jura_0
Stálý člen
11. 5. 2007   #9
-
0
-

tucna píše:#
# Zvláštní, že jednoduchý engine který jsi "naprogramoval", odpovídá podle výpisu linkeru přesně enginu Michaela Morrisona z knihy "Naučte se programovat počítačové hry za 24 hodin". Celkově je tvůj dotaz položený dost vtipně, ale to teď není podstatné...#
##
#Otevři Projekt->Vlastnosti projektu->Parametry a k linkeru připiš#
#C:/Dev-Cpp/lib/libmsimg32.a nebo ( -lmsimg32)#
#C:/Dev-Cpp/lib/libwinmm.a nebo ( -lwinmm)#
##
#V souboru Bitmap.cpp (ha :)) napiš nad include - #define WINVER 0x0500. S tím to zkompiluj a pak už to WINVER nebudeš potřebovat (myslím že vyhodí warning), tak to klidně zakomentuj...#
##
##
#


Nechapu jak jsi z hlasky:

[Linker error] undefined reference to `GameEngine::GameEngine(HINSTANCE__*, char*, int, int)'
[Linker error] undefined reference to `Bitmap::Bitmap(HDC__*, char*)'

Vydedukoval, ze potrebuje prilinkovat knihovny Windows. Pokud jsem si to precetl radne,tak mu o API fce zatim nejde.
To max:
Koukni se, jestli mas includovan hlavickovy soubor s deklaraci tridy GameEngine v souboru, kde mas definovanou metodu vracejici ukazatel. Jinak takhle se docela saptne radi, kdyz nemame moznost videt kod.

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
12. 5. 2007   #10
-
0
-

Jo asi mam, ale stejne to nejede

GameEngine.h

class GameEngine

{
protected:
static GameEngine* m_pEngine;
public:
static GameEngine* GetMyEngine() {return m_pEngine; };
}



GameEngine.cpp

GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szTitle, int iWidth, int iHeight)

{
m_pEngine = this;
m_hInstance = hInstance;
m_hWnd = NULL;
m_szTitle = szTitle;
m_iWidth = iWidth;
m_iHeight = iHeight;
m_iFrameDelay = 50;
}


Vysvetleni :
GameEngine.h - to je cast te tridy
GameEngine.cpp - to je cast konstruktoru tridy, kde mi to hlasi ten link error, radek 3,
m_pEngine = this


Tak co, kdyztak sem dam dalsi kod, kdybi bilo treba (jakoze asi bude)
Dik za pomoc

Nahlásit jako SPAM
IP: ...–
Pavel Vlašánek0
Návštěvník
12. 5. 2007   #11
-
0
-

Jura: ale ne :D Z té hlášky jsem pouze vydedukoval že jde o ten engine, a protože ten engine znám a v Devku jsem ho zprovoznil, píšu co je třea udělat.

max: co by podle tebe měl dělat ten řádek m_pEngine = this ??

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
12. 5. 2007   #12
-
0
-

To tucna: Hmm, už jsem myslel, že tam vidíš něco, co já ne.

To max: Tak jestli tohle píšou v té knize, tak ji okamžitě vyhoď, protože takto se _statické_ _členské_ proměnné neinicializují.

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
12. 5. 2007   #13
-
0
-

Ten radek sem sem skopiroval omilem, chtel sem skopirovar cast funkce WinMain v souboru GameEnigne.cpp
To tucna:co mam teda udelat

Tohle je vyrez funkce WinMain v souboru GameEngine.cpp pro juru

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{
MSG msg;
static int iTickTrigger = 0;
int iTickCount;

if(Init(hInstance))
{
if (!GameEngine::GetMyEngine()->Initialize(iCmdShow))


Hlasi to link error k tomu poslednimu radku ve vyrezu WinMain a si k ty inicializaci m_pGameEngine viz vise

PS: jak mam inicializovat ten ukazatel

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
12. 5. 2007   #14
-
0
-

To tucna
Ten radek inicializuje ten ukazatel

jako:

int b;

b = 2;


To snad vym
Neco umim ale proste u tohohle sem se zasekl, jinak to celkem de

Nahlásit jako SPAM
IP: ...–
Pavel Vlašánek0
Návštěvník
13. 5. 2007   #15
-
0
-

A proč to teda neuděláš přesně podle té knihy? :)

Pisni prosím ještě jaký error ti to teď píše

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
13. 5. 2007   #16
-
0
-

No musel sem to trochu upravit pro sebe

Link error
Takhle je to napsany v zalozce Kompilator
C:\Documents and Settings\403783\Plocha\RPG\GameEngine.o(.text+0x143) In function `ZN10GameEngineC2EP11HINSTANCE(char *, int, int)':
[Linker error] undefined reference to `GameEngine::m_pEngine'
C:\Documents and Settings\403783\Plocha\RPG\GameEngine.o(.text+0x191) In function `ZN10GameEngineC1EP11HINSTANCE(char *, int, int)':
[Linker error] undefined reference to `GameEngine::m_pEngine'
C:\Documents and Settings\403783\Plocha\RPG\GameEngine.o(.text$_ZN10GameEngine11GetMyEngineEv[GameEngine::GetMyEngine()]+0xe) In function `WinMain': [Linker error] undefined reference to `GameEngine::m_pEngine'

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
13. 5. 2007   #17
-
0
-

Jen doufam ze z toho neco poznas

Nahlásit jako SPAM
IP: ...–
Pavel Vlašánek0
Návštěvník
13. 5. 2007   #18
-
0
-

Nechybí ti náhodou v souboru GameEngine.cpp - GameEngine *GameEngine::m_pGameEngine = NULL; ?

Můžeš kdyžtak popsat změny které jsi v tom enginu udělal?

A mimochodem - používáš "Překompilovat vše" a ne jen "Překompilovat" ?

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
13. 5. 2007   #19
-
0
-

Kam to mam v tom GameEngine.cpp napsat

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
13. 5. 2007   #20
-
0
-

Zmeny pak popisu ale ted nekam jedu
Stejne sou jen drobny

Nahlásit jako SPAM
IP: ...–
Pavel Vlašánek0
Návštěvník
13. 5. 2007   #21
-
0
-

Hned pod include



//-----------------------------------------------------------------
// Game Engine Object
// C++ Source - GameEngine.cpp
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// Include Files
//-----------------------------------------------------------------
#include "GameEngine.h"

//-----------------------------------------------------------------
// Static Variable Initialization
//-----------------------------------------------------------------
GameEngine *GameEngine::m_pEngine = NULL;

//-----------------------------------------------------------------
// Windows Functions
//-----------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
13. 5. 2007   #22
-
0
-

Ted vse skonci bez chyby ale vysledny exe se nezapne
Neni ani v Spravce uloh

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
13. 5. 2007   #23
-
0
-

Ani kdyz ho zapnu v te slozce kde je ulozeny

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
13. 5. 2007   #24
-
0
-

Vypada to jako by se program zapnul a hned se zase zapnul, zapnuty byl asi vterinu
Mozna je to spatne nastaveni snimku nebo testu ve funkci WinMain

Okno se ale nezobrazi vubec

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
13. 5. 2007   #25
-
0
-

To znamená, že to spadne ještě před zavoláním CreateWindow(Ex). Pokud umíš pracovat s debuggerem, tak by neměl být problém nalézt místo, kde to padá. V případě, že s ním pracovat neumíš, tak ti doporučuju rychle to změnit. Ale abych předešel zbytečným otazkám, jako krizové východisko z téhle situace vidím použití kontrolních výpisů(MessageBox a zpráva). Vlož je do každé podmínky ve WinMain. A trasuj si cestu kudy program jde, tím snad zjistíš, kde ti program padá a v čem je problém.

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
14. 5. 2007   #26
-
0
-

At to dam kamkoli vzdy se ten message box objevy, ale okno stale nikde
Jestli, tak mi dejte e-mail a ja klidne poslu zdrojaky, aby jste to skusili
Jestli vam to nevadi

Nahlásit jako SPAM
IP: ...–
Jura_0
Stálý člen
14. 5. 2007   #27
-
0
-

Ale nic neslibuju: juracpp@seznam.cz

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
14. 5. 2007   #28
-
0
-

poslu jen ten game egine zdrojaky a ty pak pouzijte k jinymu projektu, staci prazdny funkce a jen vytvorit Game Engine pomoci new atd
Kdyztak reknu co s tim

Moc diky za vsechnu pomoc

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
14. 5. 2007   #29
-
0
-

A jak se dela s tim debuggerem

Nahlásit jako SPAM
IP: ...–
max
~ Anonymní uživatel
40 příspěvků
15. 5. 2007   #30
-
0
-

Jeste se chci zeptat, protoze to vypada ze ten Ebgib budu muset celej predelat, jestli by se cykly nedali resit misto tou divnou smyckou Timerem, tedy casovacem
A pokud myslite ze jo, tak kolik mam nastavit to posilani zpravy timeru, aby posilal 20 za vterinu
Diky

Nahlásit jako SPAM
IP: ...–
zacatecnik0
Super člen
19. 5. 2007   #31
-
0
-

SetTimer(hwnd_okna, 1, 50, NULL);//1000/20=50
??

Nahlásit jako SPAM
IP: ...–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
max
~ Anonymní uživatel
40 příspěvků
21. 5. 2007   #32
-
0
-

jo ja vim jak to udelat, ale jen jestli to neni moc blby

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

QT error: Error code 62097 — založil QtProgramming

Zaujimavy link... — založil Programmer ;)

Validný link? — založil Thomash

Mizící link — založil Zelenáč

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý