Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Metoda przechowująca zasoby

Ostatnio zmodyfikowano 2013-11-18 18:13
Autor Wiadomość
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:
C/C++
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:
C/C++
#include "GameTypes.h"
using namespace gameTypes;
namespace res
{
    Resources resources;
}

W main.cpp następuje wczytywanie i usuwanie elementów.
C/C++
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" );
    //monsterBitmap;
    //itemBitmap;
    //playerBitmap;
    //bombBitmap;
    //explosionBitmap;
}

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ę?
P-96554
Elaine
» 2013-11-18 16:16:36
extern
P-96556
Ush
Temat założony przez niniejszego użytkownika
» 2013-11-18 16:38:33
znalazłem taką konstrukcję:
C/C++
#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
P-96560
Monika90
» 2013-11-18 16:42:14
Musisz dodać definicję
Resources resources;
 do jednego pliku cpp, np. do gameResources.cpp.
P-96562
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
P-96576
1 « 2 »
Poprzednia strona Strona 2 z 2