Wskaźniki wskazują na jeden obiekt mimo że przypisuje je do dwóch oddzielnych

0

Witam, problem opisany w temacie, poniżej deklaracja klasy, a mianowicie rozchodiz się o wskazniki klasy Postać.

Tutaj deklaracja klasy przbieg gry.

class PrzebiegGry
{
    int ile_rund;
    int Ktory_gracz;
    Postac * postac1;
    Postac * postac2;
    
public:
    int licznik();
    int losuj_gracza();
    void tworzenie_postaci();
    void usuwanie_postaci();
    void przebieg_gry();
    PrzebiegGry();
};

Tutaj definicja klasy przebieg gry

void PrzebiegGry::przebieg_gry()
{
    
    int klasa;
    
    cout << "TWORZENIE POSTACI DLA GRACZA NUMER 1" << endl;
    
    do {
        cout << "Jezeli chcesz wybrac Maga wcisnij 1, jezeli chcesz wybrac Wojownika wcisnij 2, jezeli chcesz wybrac Lowce wcisnij 3" << endl;
        cin >> klasa;
    } while( klasa != 1 && klasa != 2 && klasa != 3 );
    
    if( klasa == 1 )
    {
        do {
            cout << "Wybrales Maga, jezeli chcesz wybrac Maga ognia wcisnij 1, jezeli chcesz wybrac Maga wody wcisnij 2" << endl;
            cin >> klasa;
        } while( klasa != 1 && klasa != 2 );
        
        if( klasa == 1 )
        {
            cout << "Wybrales Maga ognia" << endl;
            Mag_ognia gracz1;
            gracz1.rozdzaj_punkty();
            postac1 = & gracz1;
            
        }
        else
        {
            cout << "wybrales Maga wody" << endl;
            Mag_wody gracz1;
            gracz1.rozdzaj_punkty();
            postac1 = & gracz1;;
        }
        
    }
    else if( klasa == 2 )
    {
        do {
            cout << "Wybrales Wojownika, jezeli chcesz wybrac Paladyna wcisnij, jezeli chcesz wybrac Berserka wcisnij 2" << endl;
            cin >> klasa;
        } while( klasa != 1 && klasa != 2 );
        
        if( klasa == 1 )
        {
            cout << "Wybrales Paladyna" << endl;
            Paladyn gracz1;
            gracz1.rozdzaj_punkty();
            postac1 = & gracz1;;
        }
        else
        {
            cout << "Wybrales Berserka" << endl;
            Berserk gracz1;
            gracz1.rozdzaj_punkty();
            postac1 = & gracz1;
        }
    }
    else if( klasa == 3 )
    {
        do {
            cout << "Wybrales Lowce , jezeli chcesz wybrac Lotra  wcisnij 1, jezeli chcesz wybrac Zabojce wcisnij 2" << endl;
            cin >> klasa;
        } while( klasa != 1 && klasa != 2 );
        
        if( klasa == 1 )
        {
            cout << "Wybrales Lotra" << endl;
            Lotr gracz1;
            gracz1.rozdzaj_punkty();
            postac1 = & gracz1;
        }
        else
        {
            cout << "Wybrales Zabojce" << endl;
            Zabojca gracz1;
            gracz1.rozdzaj_punkty();
            postac1 = & gracz1;
        }
    }
    
    cout << "TWORZENIE POSTACI DLA GRACZA NUMER 2" << endl;
    
    do {
        cout << "Jezeli chcesz wybrac Maga wcisnij 1, jezeli chcesz wybrac Wojownika wcisnij 2, jezeli chcesz wybrac Lowce wcisnij 3" << endl;
        cin >> klasa;
    } while( klasa != 1 && klasa != 2 && klasa != 3 );
    
    if( klasa == 1 )
    {
        do {
            cout << "Wybrales Maga, jezeli chcesz wybrac Maga ognia wcisnij 1, jezeli chcesz wybrac Maga wody wcisnij 2" << endl;
            cin >> klasa;
        } while( klasa != 1 && klasa != 2 );
        
        if( klasa == 1 )
        {
            cout << "Wybrales Maga ognia" << endl;
            Mag_ognia gracz2;
            gracz2.rozdzaj_punkty();
            postac2 = & gracz2;
        }
        else
        {
            cout << "Wybrales Maga wody" << endl;
            Mag_wody gracz2;
            gracz2.rozdzaj_punkty();
            postac2 = & gracz2;
            
        }
    }
    else if( klasa == 2 )
    {
        do {
            cout << "Wybrales Wojownika, jezeli chcesz wybrac Paladyna wcisnij 1, jezeli chcesz wybrac Berserka wcisnij 2" << endl;
            cin >> klasa;
        } while( klasa != 1 && klasa != 2 );
        
        if( klasa == 1 )
        {
            cout << "wybrales Paladyna" << endl;
            Paladyn gracz2;
            gracz2.rozdzaj_punkty();
            postac2 = & gracz2;
        }
        else
        {
            cout << "wybrales Berserka" << endl;
            Berserk gracz2;
            gracz2.rozdzaj_punkty();
            postac2 = & gracz2;
        }
    }
    else if( klasa == 3 )
    {
        do {
            cout << "Wybrales Lowce , jezeli chcesz wybrac Lotra  wcisnij 1, jezeli chcesz wybrac Zabojce wcisnij 2" << endl;
            cin >> klasa;
        } while( klasa != 1 && klasa != 2 );
        
        if( klasa == 1 )
        {
            cout << "Wybrales Lotra" << endl;
            Lotr gracz2;
            gracz2.rozdzaj_punkty();
            postac2 = & gracz2;
        }
        else
        {
            cout << "Wybrales Zabojce" << endl;
            Zabojca gracz2;
            gracz2.rozdzaj_punkty();
            postac2 = & gracz2;
        }
    }
    
    
    
    postac1->menu();
    
    
}

I w ostatniej linijce kiedy odwołuje się do funkcji menu klasy postac1 ( czyli obiektu gracz1) to w programie pokazuje mi się menu klasy postac2. Jeżeli tą linijke umieszcze przed sekcją TWORZENIE POSTACI GREACZA 2 to wszystko jest wporządku i pokazuje się odpowiednie menu. Głowie się nad tym 2h i nie wiem gdzie jest błąd, a program ten odpalam po pół roku i nie przypominam sobie żeby taki błąd występował wczesniej tym bardziej że był to program na zaliczenie.

0

Prowadzący widział kod czy tylko efekt działania?
Dopisz do konstruktorów i destruktorów tego typu rzeczy i przeanalizuj wypisane teksty:

std::cout << "Tworze obiekt NazwaObiektu\n";
0

Wskaźnikom przypisujesz adres zmiennej lokalnej, która przestaje istnieć po wyjściu z bloku. To i tak szczęście, że nie ma crasha.
Już pomijam, że ta funkcja to jeden wielkie copy-paste.

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