Metoda przechowująca zasoby
Ostatnio zmodyfikowano 2013-11-18 18:13
Ush Temat założony przez niniejszego użytkownika |
» 2013-11-18 15:40:18 Niestety singleton za bardzo komplikował sprawę ze zwalnianiem pamięci, dlatego zdecydowałem się (o zgrozo) na globalną strukturę przechowującą pliki. W projekcie mam plik gameTypes.h z własnymi typami i dopisałem tam: struct Resources { std::array < ALLEGRO_BITMAP *, BITMAP_COUNT > bitmap; std::array < ALLEGRO_FONT *, FONT_COUNT > font; std::array < ALLEGRO_SAMPLE *, SAMPLE_COUNT > sample; };
Następnie stworzyłem nowy plik gameResources.h: #include "GameTypes.h" using namespace gameTypes; namespace res { Resources resources; }
W main.cpp następuje wczytywanie i usuwanie elementów. void LoadResources() { resources.bitmap[ Bitmap::B_HARD_BRICK ] = al_load_bitmap( "res/images/hardBrick.png" ); resources.bitmap[ Bitmap::B_SOFT_BRICK ] = al_load_bitmap( "res/images/softBrick.png" ); resources.bitmap[ Bitmap::B_BCK_FRAME1 ] = al_load_bitmap( "res/images/backgroundFrameBitmap.png" ); resources.bitmap[ Bitmap::B_BCK_FRAME2 ] = al_load_bitmap( "res/images/backgroundFrameBitmap2.png" ); }
void DeleteResources() { for( int i = 0; i < BITMAP_COUNT; i++ ) { al_destroy_bitmap( resources.bitmap[ i ] ); } }
Elementy struktury zgodnie z założeniami są widoczne w każdym miejscu w kodzie po dodaniu pliku nagłówkowego gameResources.h Problem polega na tym że całość się nie kompiluje: Error 1 error C2086: 'gameTypes::Resources res::resources' : redefinition c:\users\usz\desktop\boomanek\bomb\bomb\gameresources.h 4 1 Bomb Error 2 error C2086: 'gameTypes::Resources res::resources' : redefinition c:\users\usz\desktop\boomanek\bomb\bomb\gameresources.h 4 1 Bomb Error 3 error C2086: 'gameTypes::Resources res::resources' : redefinition c:\users\usz\desktop\boomanek\bomb\bomb\gameresources.h 4 1 Bomb
Nie potrafię rozwiązać tego problemu. Gdy dodam extern przed deklaracją w gameResources.h to błędy są jeszcze ciekawsze -_- : Error 3 error LNK2019: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) referenced in function __catch$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$1 C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\SetControls.obj Bomb Error 1 error LNK2001: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\Menu.obj Bomb Error 2 error LNK2001: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\Options.obj Bomb Error 4 error LNK2001: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\ViewControls.obj Bomb Error 5 error LNK2001: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\About.obj Bomb Error 6 error LNK2001: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\Interface.obj Bomb Error 7 error LNK2001: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\main.obj Bomb Error 8 error LNK2001: unresolved external symbol "struct gameTypes::Resources res::resources" (?resources@res@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\MainMenu.obj Bomb Error 9 error LNK1120: 1 unresolved externals C:\Users\usZ\Desktop\Boomanek\Bomb\Debug\Bomb.exe Bomb
Wie ktoś jak zadeklarować taką globalną (tzn międzyplikową) strukturę? |
|
Elaine |
» 2013-11-18 16:16:36 extern |
|
Ush Temat założony przez niniejszego użytkownika |
» 2013-11-18 16:38:33 znalazłem taką konstrukcję: #include "GameTypes.h" using namespace gameTypes;
#ifndef GAMERESOURCES_H #define GAMERESOURCES_H
extern Resources resources;
#endif
nie działa.. :c Error 3 error LNK2019: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) referenced in function __catch$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$1 C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\SetControls.obj Bomb Error 1 error LNK2001: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\Menu.obj Bomb Error 2 error LNK2001: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\Options.obj Bomb Error 4 error LNK2001: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\ViewControls.obj Bomb Error 5 error LNK2001: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\About.obj Bomb Error 6 error LNK2001: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\Interface.obj Bomb Error 7 error LNK2001: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\main.obj Bomb Error 8 error LNK2001: unresolved external symbol "struct gameTypes::Resources resources" (?resources@@3UResources@gameTypes@@A) C:\Users\usZ\Desktop\Boomanek\Bomb\Bomb\MainMenu.obj Bomb Error 9 error LNK1120: 1 unresolved externals C:\Users\usZ\Desktop\Boomanek\Bomb\Debug\Bomb.exe Bomb
|
|
Monika90 |
» 2013-11-18 16:42:14 Musisz dodać definicję Resources resources; do jednego pliku cpp, np. do gameResources.cpp. |
|
Ush Temat założony przez niniejszego użytkownika |
» 2013-11-18 18:13:59 ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Dziękuję pięknie :3 |
|
1 « 2 » |