[C++, SFML] Inicjalizacja obiektu statcznego w funkcji main
Ostatnio zmodyfikowano 2013-05-25 20:29
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ę: static sf::Texture textury[ 5 ];
W funkcji main tworzę obiekt tej klasy: 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 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. |
|
DejaVu |
» 2013-05-24 22:09:30 |
|
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ś: 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. |
|
cyklopek11 |
» 2013-05-25 11:48:36 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. |
|
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. |
|
pekfos |
» 2013-05-25 18:25:26 Zgaduję, że zapomniałeś o sf::Texture Klasa::textury[ 5 ];
|
|
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. 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. |
|
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. |
|
« 1 » |