static Texture w SFML - rzuca wyjątkami... o co kaman?

0

Cześć,
bawię się w SFML-u i natrafiłem na coś, czego nie rozumiem. Mam więc pytanie: dlaczego nie mogę utworzyć statycznej Textury do moich Sprite-ów? Gdy staram się to zrobić to wszystko ładnie mi się kompiluje, ale po uruchomieniu programu (bez wykorzystania tej tekstury) rzuca mi wyjątkami, że:

Access violation writing location 0x00...4.

Czy wiecie może czemu tak się dzieje?

Tak w skrócie to mój kod wygląda mniej więcej tak:

class Tile
   {
   public:
   static void SetTextures()
      {
      obrazek.loadFromFile(...);
      //...
      }

   private:
      static Texture obrazek;
   };

//.cpp
Texture Tile::obrazek;
0

To nie wyjątek. To błąd programu.

0
spartanPAGE napisał(a):

To nie wyjątek. To błąd programu.

Co masz na myśli pisząc "błąd programu"?
Przed zacytowanym zdaniem jest jeszcze:

Unhandled exception at 0x772A22D2 (ntdll.dll) in nazwa_gry.exe: 0xC0000005: Access violation writing location 0x00000004.

Poza tym ja jeszcze żadnego obiektu owej klasy nie utworzyłem - błąd wynika z utworzenia obiektu statycznego w pliku .cpp tj. 'Texture Tile::obrazek;' - jak likwiduję tą linię kodu to gra się normalnie włącza...

Resident napisał(a):

Bardzo podobny problem [5 sekund googla]:
http://4programmers.net/Forum/C_i_C++/226863-sfml_-_statyczny_obiekt_sftexture

5 sekund googla i pudło... Znaleziony wątek nie rozwiązuje mojego problemu...

pokaż cały SetTextures. Tworząc zmienne statyczne tworzysz jeden egzemplarz a nie osobne do każdego obiektu klasy więc nie wiem czemu "texture"s"

Cały kod jest bardzo zbliżony do pokazanego, z tą różnicą, że jest więcej textur (dlatego textures) i blokada na wypadek wielokrotnego wywołania funkcji. Wygląda to tak:

class Tile
	{
	public:
		static void SetTextures()
			{
			if(!loaded)
				{
				loaded = true;
				obrazek1.loadFromFile(...);
				obrazek2.loadFromFile(...);
				obrazek3.loadFromFile(...);
				//...
				}
			}

	private:
		static Texture obrazek;
		Sprite sprite;

		static Texture obrazek1;
		static Texture obrazek2;
		static Texture obrazek3;
		//...
		
		static bool loaded;
	};

//.cpp
Texture Tile::obrazek1;
Texture Tile::obrazek2;
Texture Tile::obrazek3;
bool Tile::loaded = false;

EDIT:
Huh, oki doky. Mam prośbę: czy mógłby ktoś sprawdzić, czy może w ogóle utworzyć obiekt Texture globalnie w SFML 2.1 najlepiej w Vs 2013? Bo okazuje się, że (przynajmniej u mnie) obiektu globalnego textury również nie mogę utworzyć - wywala mi wyjątek przy odpaleniu gry...

EDIT2:
znalazłem coś takiego: http://en.sfml-dev.org/forums/index.php?topic=12815.0 - to chyba wyjaśnia sprawę... ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1