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

Dziwna sprawa z przypisywaniem wartosci pola w obiekcie.

Ostatnio zmodyfikowano 2017-01-08 21:34
Autor Wiadomość
Clarc
Temat założony przez niniejszego użytkownika
Dziwna sprawa z przypisywaniem wartosci pola w obiekcie.
» 2017-01-08 19:14:46
Witam, piszę prostą grę w której będzie możliwość zapisywania i wczytywania gry. nie będę wrzucał tutaj całego kodu bo to się mija z celem zrobię prosty przykład który ukaże mój problem.





 
C/C++
class Aaa
{
public:
    int x;
    Aaa() { x = 0 }
};

class Gracz
{
public:
    Aaa obiekt;
    void zapisz();
    void wczytaj();
}

metoda zapisz oraz wczytaj odpowiadają kolejno za wczytanie i zapisanie do pliku i wyglądają następująco
 
C/C++
void Gracz::wczytaj()
{
    int nr_linii = 1;
    string linia;
    fstream plik;
    plik.open( "save/zapisz.txt", ios::in );
   
    if( plik.good() == false )
    {
        cout << "Nie udalo sie otworzyc pliku!";
        exit( 0 );
    }
    getline( plik2, linia );
   
    obiekt->x = atoi( linia.c_str() );
   
    plik.close
}


void Gracz::zapisz()
{
    int nr_linii = 1;
    string linia;
    fstream plik2;
    plik2.open( "save/zapisz.txt", ios::out );
   
    if( plik2.good() == false )
    {
        cout << "Nie udalo sie otworzyc pliku!";
        exit( 0 );
    }
   
    plik2 << obiekt->x;
    plik.close
}


Na czym polega problem? otóż na wstępie program się kompiluje. jeśli uruchomimy program i wywołamy metodę zapisz wykona się ona poprawnie. Jeśli uruchomimy program i wywołamy metodę wczytaj tez zadziała ona poprawnie. natomiast jeśli uruchomimy program i wywołamy metodę zapisz a następnie metodę wczytaj wyskakuje program przestał działać. drogą dedukcji i debugerem zauważyłem że błąd wyskakuje w tej linijce jeśli wcześniej damy metodę zapisz
C/C++
obiekt->x = atoi( linia.c_str() );

nawet gdy w metodzie wczytaj usuniemy wszystko i damy coś takiego

C/C++
obiekt->x = 5;

jest taki sam błąd w przeciwną stronę gdy najpierw damy wczytaj a potem zapisz błąd występuje w tej linijce

C/C++
plik2 << obiekt->x;
przypominam że program się kompiluje i normalnie się uruchamia więc nie wiem co jest :/ jest ktoś mi wstanie pomóc? ewentualnie literówki w kodzie nie mają wpływu ponieważ nie kopiuje tego tylko napisałem na szybko w poście :)

 










P-156206
Gibas11
» 2017-01-08 19:48:12
plik.close
? Możesz to wywalić i będzie dobrze, destruktor sam to załatwi a ty zdaje się zapomniałeś o nawiasach. No i chyba masz gdzieś globalnie (albo w klasie) zadeklarowane
std::fstream plik
, bo w drugiej funkcji nie powinno być takiego obiektu (z innego wczytujesz, inny zamykasz).
P-156207
karambaHZP
» 2017-01-08 21:34:53
C/C++
getline( plik2, linia );

obiekt->x = atoi( linia.c_str() );
Takie coś z powodzeniem możesz zamienić na coś takiego:
plik2 >> obiekt->x;
Oczywiście pod warunkiem, że wczytujemy do zmiennej przechowującej liczbę lub pojedynczy wyraz.

Jeśli chodzi o twój błąd, Gibas11 pewnie ma rację. Możesz spróbować ustawić wskaźniki plikowe na początek pliku,
a jeśli to nic nie da, możesz mieć wciąż niezamknięty plik i próbujesz go ponownie otworzyć.
P-156212
« 1 »
  Strona 1 z 1