pliki i wektory

0

Witam. mam mały problem, ponieważ potrzebuję zrobić tak aby funkcja odczytywała mi dane z pliku i wpisywała je na koniec wektora. czyli jak np. w wektorze mam "a" w pliku mam "bc" to po wwczytaniu i wpisaniu ma być "abc". Mam taki kod:

    
string line;
ifstream plik;
plik.open("cos.txt");
while(!plik.eof())
{
getline(plik,line);
FC.push_back(line);
}
plik.close(); 

I wyskakuje mi blad:
|143|error: no matching function for call to 'std::vector<Klub, std::allocator<Klub> >::push_back(std::string&)'|
Linia 143 to:

plik.close();

Nie mam pojecia jak to zrobic... ;/ proszę pomóżcie

0

Zmienna FC jest typu std::vector<Klub>. Czyli jest to std::vector, który przechowuje elementy typu Klub. Jak chcesz do takiego pojemnika wsadzić std::string? Kompilator właśnie to mówi.

Co o jest Klub? Rozumiem, że ta klasa ma jakieś pole, które jest typu std::string i to tam chcesz wpisać ten tekst z pliku? W tej pętli musisz tworzyć nowy obiekt tego typu, ustawiać ten tekst i dopiero potem robić push_back. Innym rozwiązaniem jest konstruktor, który ma jeden wymagany argument typu std::string i który nie jest explicit.

0

czyli z tego co rozumiem mam stworzyć nowa zmienna "tymczasowa" z tego Klub i do niej dopisywać dopiero string? czyli np
Klub cos i do tego "cos" mam dopisywać ten string a potem tego "cos" dać do wektora?

Klub to jest struktura:

struct Klub
{
    string nazwaKlubu;
    string kraj;
    string trener;
    string trofea;
    int rokZalozenia;
};

i chce aby kazde pole z pliku bylo wpisane do innej zmiennej. tak samo jak robie podczas wpisywania do pliku

0

Pokaż jak wygląda jedna linijka z pliku z danymi.

0

Wystarczy że dodasz do struktury Klub konstruktor:
Klub::Klub(string init)
{
// tu jakoś rozdzielić ten napis na składowe
}
Po dodaniu takiego konstruktora może się pojawić błąd związany z brakiem konstruktora domyślnego, więc dodać też:
Klub::Klub() {}

0

to z tym konstruktorem do struktury nie dziala bądź ja coś źle robię. jak daje tak jak powiedziałeś:

struct Klub::Klub(string init)
{
    string nazwaKlubu;
    string kraj;
    string trener;
    string trofea;
    int rokZalozenia;
}; 

to wyskakuje mi strasznie dużo błędów związanych właśnie z tą strukturą. Te błędy są przy wywoływaniu jej

jedna linijka z pliku z danymi to:
Nazwa klubu: FCB
a całość jednego wpisu wygląda tak:

Nazwa klubu: FCB
kraj: Hiszpania
Trener: portoryko
Trofea: 18
Rok zalozenia:1800
--------------

dobra poradzilem sobie z dopisywanie do wektora danych z pliku.
zrobilem to tak:

    Klub dr;
    ifstream plik;
    plik.open("baza.txt");
    while(!plik.eof())
    {
        getline(plik,dr.nazwaKlubu);
        getline(plik,dr.kraj);
        getline(plik,dr.trener);
        getline(plik,dr.trofea);
        getline(plik,dr.rokZalozenia);
        FC.push_back(dr);
    }
    plik.close();
0
Class Klub
{
    public:
    string nazwaKlubu;
    string kraj;
    string trener;
    string trofea;
    int rokZalozenia;
    Klub (string a, string b, string c, string d)

}; 
.................................
string line1,line2,line3,line4;
vector <Klub> FC;
ifstream plik;
plik.open("cos.txt");
while(!plik.eof())
{
      getline(plik,line1);
      getline(plik,line2);
      getline(plik,line3);
      getline(plik,line4);
      getline(plik,line5);
      Klub x(line1,line2,line3,line4,line5);
      FC.push_back(x);
}
plik.close();
0

Tam w konstruktorze już kombinuj sam :P

0

kurde ;/ zauważyłem teraz inny problem ;/ jak wpisze do pliku to wygląda to tak:

Nazwa klubu: fc1
kraj: fc1
Trener: fc1
Trofea: fc1
Rok zalozenia: fc1

a jak użyje tego dopisywania do wektora w wyświetle to w konsoli to nagle wyskakują mi podwójnie

Nazwa klubu:Nazwa klubu: fc1
kraj:kraj: fc1
Trener:Trener: fc1
Trofea:Trofea: fc1
Rok zalozenia:Rok zalozenia: fc1

i jeszcze często gdzieś urywa mi dane i zastępuje je "---------" nie wiem co jest z tym źle ;/

0

wczytuje wszędzie fc1, bo w pętli while do każdego line wczytuje ten sam wyraz: fc1 (dopiero kolejne przejście pętli to wczytywanie nowego wyrazu).
spróbuj zrobić jakoś tak:


Class Klub
{
public:
string nazwaKlubu;
string kraj;
string trener;
string trofea;
int rokZalozenia;
Klub (string 1, string 2, string 3, string 4)

};
.................................
string line1,line2,line3,line4;
vector <Klub> FC;
ifstream plik;
plik.open("cos.txt");
int i = 0;
while(!plik.eof())
{
getline(plik,line i); //albo: line[i]
Klub x(line i);
FC.push_back(x);
}
plik.close();


edit. moze tez zalezec od tego w jakiej formie masz napisany plik. spróbuj też ew. wczytywać nie getlinem a: plik >> line
mam nadzieję, że trochę pomogłem, nie dam głowy czy to jest dobrze

0

sorry, nie: Klub x(line i), tylko: Klub x(string i)

0

nie chodzi oto ze wczytuje mi caly czas to samo. Po prostu ja tak wpisalem. Zapisywanie do pliku jest dobre. ale juz wiem dlaczego mi zle wyswietlalo jak dodawalem to do wektora ;)

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