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

[C++] Problem z zapisaniem zmiennych po pliku.

Ostatnio zmodyfikowano 2014-05-07 10:08
Autor Wiadomość
Acarin1995
Temat założony przez niniejszego użytkownika
[C++] Problem z zapisaniem zmiennych po pliku.
» 2014-02-27 16:01:36
Witam potrzebuje pomocy... Funkcja zapsu do pliku danych dziala bez problemu ale odczytu nie... Ktos wie jak odczytac zmienne tekstowe i liczbowe na podstawie ponizszego kodu:
C/C++
int CPostac::zapiszGre()
{
    fstream zapisGry;
    zapisGry.open( "save.txt", ios::out );
    zapisGry << p_bron->nazwa << " " << p_bron->atakMin << " " << p_bron->atakMax << " " << p_bron->wartosc << " " <<
    p_helm->nazwa << " " << p_helm->punktyPancerza << " " << p_helm->typ << " " << p_helm->wartosc << " " << p_napiersnik->nazwa << " " <<
    p_napiersnik->punktyPancerza << " " << p_napiersnik->typ << " " << p_napiersnik->wartosc;
    zapisGry.close();
}
int CPostac::wczytajGre()
{
    fstream zapisGry;
    zapisGry.open( "save.txt", ios::in );
    zapisGry >> p_bron->nazwa >> " " >> p_bron->atakMin >> " " >> p_bron->atakMax >> " " >> p_bron->wartosc >> " " >>
    p_helm->nazwa >> " " >> p_helm->punktyPancerza >> " " >> p_helm->typ >> " " >> p_helm->wartosc >> " " >> p_napiersnik->nazwa >> " " >>
    p_napiersnik->punktyPancerza >> " " >> p_napiersnik->typ >> " " >> p_napiersnik->wartosc;
    zapisGry.close();
}
P-105331
Monika90
» 2014-02-27 16:25:32
Po prostu usuń te " " z funkcji odczytującej i powinno działać.

Z tym że, jeżeli nazwy zawierają spacje to będziesz musiał coś z tym zrobić.
P-105333
Acarin1995
Temat założony przez niniejszego użytkownika
[c++] problem Vector a podklasa
» 2014-02-27 17:25:54
Dzięki działa... mam trzy klasy Przedmiot jest klasa glowna, Bron dziedziczy z klasy przedmiot, tak samo pancerz. Jak zrobic by przy wskazywaniu np. na obiekt pancerz z vectora
vector < Przedmiot *> plecak;
 Nie wyskakiwal blad typu: [Error] invalid conversion from 'CPrzedmiot*' to 'CBron*' [-fpermissive]'. Wskaźnik wygląda tak
CBron * p_bron;
 A wskazanie tak
C/C++
* p_bron = plecak[ i ]; //i to numer wybranego slotu[/cpp].
... Błąd się pojawił gdy zacząłem używać kontenera vector.
P-105338
PsichiX
» 2014-02-27 18:45:19
rzutuj na typ docelowy.
P-105346
Acarin1995
Temat założony przez niniejszego użytkownika
» 2014-02-27 20:23:29
Witam to znowu ja... Mam teraz problem z odczytem apka. się kompiluje gra zapisuje lecz przy wczytaniu sie zawiesza i wyłącza kod poniżej:
C/C++
int CPostac::zapiszGre()
{
    fstream zapisGry;
    zapisGry.open( "save.txt", ios::out );
    zapisGry << p_bron->nazwa << " " << p_bron->atakMin << " " << p_bron->atakMax << " " << p_bron->wartosc << " " <<
    p_helm->nazwa << " " << p_helm->punktyPancerza << " " << p_helm->typ << " " << p_helm->wartosc << " " << p_napiersnik->nazwa << " " <<
    p_napiersnik->punktyPancerza << " " << p_napiersnik->typ << " " << p_napiersnik->wartosc << " " <<
    p_spodnie->nazwa << " " << p_spodnie->punktyPancerza << " " << p_spodnie->punktyPancerza << " " << p_spodnie->wartosc << " " << nazwa << " " <<
    nazwaPlci << " " << atakMin << " " << atakMax << " " << zycie << " " << zycieMax << " " << moneta << " " << sila << " " <<
    wytrzymalosc << " " << zrecznosc << " " << szansaNaTrafienieKrytyczne << " " << silaTrafieniaKrytycznego << " " << p_pancerz << " " << doswiadczenie;
    zapisGry.close();
}
int CPostac::wczytajGre()
{
    fstream zapisGry;
    zapisGry.open( "save.txt", ios::in );
    zapisGry >> p_bron->nazwa >> p_bron->atakMin >> p_bron->atakMax >> p_bron->wartosc >>
    p_helm->nazwa >> p_helm->punktyPancerza >> p_helm->typ >> p_helm->wartosc >> p_napiersnik->nazwa >>
    p_napiersnik->punktyPancerza >> p_napiersnik->typ >> p_napiersnik->wartosc >>
    p_spodnie->nazwa >> p_spodnie->punktyPancerza >> p_spodnie->punktyPancerza >> p_spodnie->wartosc >> nazwa >>
    nazwaPlci >> atakMin >> atakMax >> zycie >> zycieMax >> moneta >> sila >>
    wytrzymalosc >> zrecznosc >> szansaNaTrafienieKrytyczne >> silaTrafieniaKrytycznego >> p_pancerz >> doswiadczenie;
   
    zapisGry.close();
P-105355
Monika90
» 2014-02-28 17:50:06
Z tego co podałeś niewiele wynika. Jakie są typy tych wszystkich zmiennych p_bron, p_bron->nazwa, p_helm, itp? Jakie są ich wartości? Może masz gdzieś niezainicjalizowany wskaźnik?
P-105418
Acarin1995
Temat założony przez niniejszego użytkownika
» 2014-02-28 18:24:53
C/C++
class CPostac
    : public Istota
{
public:
    CPostac();
    int sila;
    int wytrzymalosc;
    int zrecznosc;
    bool plec;
    string nazwaPlci;
    //Rozgrywka
    int nowaGra();
    int wczytajGre();
    int zapiszGre();
    //Ekwipunek
    vector < CPrzedmiot *> plecak;
    CPrzedmiot * p_bron;
    CPrzedmiot * p_napiersnik;
    CPrzedmiot * p_helm;
    CPrzedmiot * p_spodnie;
    int zapchajEkwipunek();
    int wyswietlEkwipunek();
    int wyrzucPrzedmiot();
    int zalozPrzedmiot();
    int t_wytrzymalosc();
   
};

class CPrzedmiot
{
public:
    string nazwa;
    int atakMin;
    int atakMax;
    int punktyPancerza;
    int typ; // TYPY 1 BRON GLOWNA, 2 TARCZA, BRON POBOCZNA, 3 HELM, 4 NAPIERSNIK, 5 NOGI, 6 STOPY
    int wartosc;
   
};

class CBron
    : public CPrzedmiot
{
public:
    CBron( string nazwa, int atakMin, int atakMax, int typ_, int wartosc );
}

class CPancerz
    : public CPrzedmiot
{
public:
    CPancerz( string nazwa, int punktyPancerza, int typ, int wartosc );
};
Coś jeszcze?
P-105423
WaxerPL
» 2014-02-28 21:09:45
Skoro np. Klasa CBron dziedziczy publicznie po klasie CPrzedmiot oznacza że, ma wszystkie jej atrybuty i metody. Tworząc klasę Istota nie używaj wskaźników na CPrzedmiot, lecz użyj na Broń czy inny "sprzęt".

Zamiast: CPrzedmiot * p_bron;
Użyj: CBron * p_bron;

Analogicznie z pozostałym ekwipunkiem.

Wektor: vector < CPrzedmiot *> plecak; Rozumiem że w nim będziesz "przechowywał" ekwipunek?

POZA TYM:

W klasie CPrzedmiot masz 6 atrybutów:
 string nazwa;
    int atakMin;
    int atakMax;
    int punktyPancerza;
    int typ;
    int wartosc;

Natomiast gdy wywołujesz konstruktor CPrzedmiot klasą np. CBroń, nie wywołujesz atrybutu punkty pancerza, co może powodować błędy, ponieważ wszystkie zadeklarowane atrybuty powinny być użyte.
Tak samo jest w klasie CPancerz, nie używasz atrybutów atakMax, atakMin.

Lepiej będzie gdy zrobisz:
class CPrzedmiot {
public:
   string nazwa;  
    int typ;
    int wartosc;
}

class CPancerz : public CPrzedmiot {
public:
int punktyPancerza;

CPancerz(string nazwa, int punktyPancerza, int typ, int wartosc)
}
class CBron : public CPrzedmiot {
int atakMax;
int atakMin;
CBron( string nazwa, int atakMin, int atakMax, int typ_, int wartosc );
}

I jeszcze jedno klasa CBron powinna mieć nawias zakończony średnikiem.
Ponieważ ty "wpisaleś" klasę CPancerz w klase CBron.




P-105431
« 1 » 2
  Strona 1 z 2 Następna strona