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

[C++, SFML] Inicjalizacja obiektu statcznego w funkcji main

Ostatnio zmodyfikowano 2013-05-25 20:29
Autor Wiadomość
czosnek17
Temat założony przez niniejszego użytkownika
[C++, SFML] Inicjalizacja obiektu statcznego w funkcji main
» 2013-05-24 21:20:05
Mam w klasie
obiekt
 taką definicję:
C/C++
static sf::Texture textury[ 5 ];

W funkcji main tworzę obiekt tej klasy:
C/C++
obiekt mapa[ 3 ][ 3 ];

Nie wiem jak przypisać tam tekstury. Można to zrobić w sposób sf::Texture obiekt::textury[0] =, ale musiałbym mieć przygotowaną zmienną sf::Texture do podstawienia. W zakresie funkcji main to nie działa. Gdy używam do tego funkcji setTexture() też są błędy.

Można też w funkcji main
C/C++
mapa[ 0 ][ 0 ].textury[ 0 ].loadFromFile( "m1.png" );
ale dostaję wtedy undefined reference to obiekt::textury. Może jest jakiś prosty błąd, ale nie wiem gdzie.
P-83815
DejaVu
» 2013-05-24 22:09:30
Rozwiązanie Twojego problemu i odpowiedź na pytanie:
http://cpp0x.pl/forum/temat/?id=8398
P-83818
czosnek17
Temat założony przez niniejszego użytkownika
» 2013-05-24 22:49:55
Nie wiem, czy o to chodziło, zrobiłem takie coś:
C/C++
void obiekt::utexture( unsigned short int t, int prw = 0 )
{
    static sf::Texture textury[ 5 ];
    if( prw == 1 )
    {
        textury[ 0 ].loadFromFile( "m1.png" );
        textury[ 1 ].loadFromFile( "m2.png" );
        return;
    }
   
    if( t == 0 )
         spr.setTexture( textury[ 0 ] );
   
    if( t == 1 )
         spr.setTexture( textury[ 1 ] );
   
}

Tekstury się ustawiają, ale przy wyłączaniu programu konsolą pojawia się błąd aplikacji "instrukcja spod 0x... odwołuje się do pamięci pod adresem 0x... . Pamięć nie może być read". Poza tym wolałbym mieć tekstury w klasie, żeby potem można było łatwo rozwijać kod.
P-83820
cyklopek11
» 2013-05-25 11:48:36
C/C++
static sf::Texture textury[ 5 ];
Wg tego co piszesz (i kodujesz) ta zmienna nie jest statycznym polem klasy, tylko statyczną zmienną metody utexture. Jest dostępna tylko dla tej metody (przez dowolną instancję obiektu klasy obiekt). A więc main() nie ma prawa do niej "zaglądać" - stąd protest kompilatora.
P-83827
czosnek17
Temat założony przez niniejszego użytkownika
» 2013-05-25 18:21:41
Więc jak mam to zrobić? Dałem definicję do klasy i próbowałem dostać się do niej metodą statyczną - też jest undefined reference.
P-83859
pekfos
» 2013-05-25 18:25:26
Zgaduję, że zapomniałeś o
C/C++
sf::Texture Klasa::textury[ 5 ]; //w jednym dowolnym pliku .cpp
P-83861
czosnek17
Temat założony przez niniejszego użytkownika
» 2013-05-25 20:23:07
Rzeczywiście, tak to jest jak się nieuważnie czyta przykłady. Wszystko jest ok ale gdy tego używam i wyłączę program konsolą dostaję błąd "instrukcja spod 0x... odwołuje się do pamięci pod adresem 0x... . Pamięć nie może być read".
Wystarczy, że w main wywołam tą funkcję statyczną i już otrzymuję powyższy błąd.
C/C++
void obiekt::tworztxt()
{
    textury[ 0 ].loadFromFile( "m1.png" );
    textury[ 1 ].loadFromFile( "m2.png" );
   
}
Nic nadzwyczajnego się tutaj nie dzieje, więc nie wiem w czym problem.
P-83896
DejaVu
» 2013-05-25 20:29:15
Problem w tym, że obiekty sf::Texture są niszczone później niż okno SFML-a, które prawdopodobnie sprząta zasoby i tym samym otrzymujesz błąd przy wyjściu z aplikacji.
P-83900
« 1 »
  Strona 1 z 1