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

[STL] Map - Crash programu po użyciu metody insert()

Ostatnio zmodyfikowano 2013-10-13 10:52
Autor Wiadomość
Revo
Temat założony przez niniejszego użytkownika
[STL] Map - Crash programu po użyciu metody insert()
» 2013-10-13 10:24:37
Witam ... Otóż problem jest dosyć dziwny, ale przejdę do rzeczy. Piszę grę w SFMLu 2.0 i gdzieś trzeba przechowywać potwory. Wybrałem mapę do tego celu. Wszystko pięknie, fajnie gra prawie skończona wszystko fajnie działa no ale trzeba napisać generator tych potworków... Struktura wygląda u mnie tak :

Uproszczona klasa dla przykładu:

C/C++
class Maps
{
private:
    std::map < int, Monsters > MapMonster;
   
public:
    void AddMonsterToMap( Monsters & monster );
   
}

C/C++
void Maps::AddMonsterToMap( Monsters & monster )
{
    MapMonster.insert( std::pair < int, Monsters >( monster.GetCreatureCID(), monster ) ); // <- TUTAJ WYWALA BŁĄD
}

I teraz tak (ten wypadek działa pięknie) :

Dodaję potwora w MAIN przed głowną pętlą :

C/C++
...
Monsters G_MONSTERS( & anima, 10, 16, "Zenek", 2000, 10000, 10000, 1, 1000, 1000 );
G_MAPS.AddMonsterToMap( G_MONSTERS );

while( G_MAPS.window.isOpen() )
{
    sf::Event event;
    while( G_MAPS.window.pollEvent( event ) )
    ...

A jeżeli dodam te 2 linijki do jakiejś funkcji to program kaput ... Tak jakby mówił "chyba Ci się porąbały adresy synku ..."

C/C++
Monsters G_MONSTERS( & anima, 10, 16, "Zenek", 2000, 10000, 10000, 1, 1000, 1000 );
G_MAPS.AddMonsterToMap( G_MONSTERS );

Przykładowa funkcja powodująca wysypanie się programu :

C/C++
void Maps::GenerateMonster( Animation anima ) // <- Funkcja z klasy Maps (public)
{
    Monsters G_MONSTERS( & anima, 10, 16, "Poring", 2000, 10000, 10000, 1, 1000, 1000 );
    AddMonsterToMap( G_MONSTERS );
}

Co jest z tym nie tak ?? Czy jest coś w map[STL] o czym nie wiem ??
Mam w klasie Maps jeszcze :
C/C++
std::vector < Effects > MapEffects;

i jak dodaję ( MapEffects.push_back() ) efekt do MapEffects z poziomu metody klasy Maps to nie ma takiego problemu ...
P-93595
maly
» 2013-10-13 10:48:32
void Maps::GenerateMonster( Animation anima )
brak referencji dla anima powoduje stworzenie lokalnej kopii objektu.
Może jest więcej tego typu błędow.
P-93596
Revo
Temat założony przez niniejszego użytkownika
» 2013-10-13 10:52:19
Znalazłem błąd. Jednak nie ma co siedzieć po nocach do oporu, bo człowiek nie myśli ...

@Up
To nie przez Animation, ale blisko :P W konstruktorze Monsters mam ładowanie z pliku fontu, a jako że sf::Text musi mieć do niego cały czas dostęp i nie może to być obiekt chwilowy. Bardzo przepraszam za zamieszanie ...
P-93597
« 1 »
  Strona 1 z 1