Dybusek Temat założony przez niniejszego użytkownika |
Umieszczenie danych pobranych z pliku w dynamicznej tablicy ('std::vector') » 2010-08-04 13:59:14 Witam. Mam problem z odczytem danych z pliku do vectora. Korzystając z zwykłych tablic wszystko jest ok. Próbowałem użyć czegoś takiego: plik >> dane; klient_t[ i ].id_k.push_back( dane ); plik >> dane; klient_t[ i ].imie_k.push_back( dane );
Ale wyskakuje blad: D:\Szkola\Stypendium\1Biblioteka\main.cpp In function `int main()': 44 D:\Szkola\Stypendium\1Biblioteka\main.cpp no matching function for call to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(std::string&)' note C:\Dev-Cpp\include\c++\3.4.2\bits\basic_string.h:782 candidates are: void std::basic_string<_CharT, _Traits, _Alloc>::push_back(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
Proszę o pomoc. |
|
steckel |
» 2010-08-04 16:50:28 Pokaż cały kod. |
|
Dybusek Temat założony przez niniejszego użytkownika |
» 2010-08-04 17:25:52 Na razie nie mam jak dodać całego kodu ponieważ zmieniłem tablice na statyczne, żeby ruszyć dalej z projektem. Mam w programie strukturę i chcę wczytać do tablicy vector typu strukturalnego dane z pliku(dane są różnych typów). Ze statycznymi to nie ma problemu bo wystarczy, że dam: while( !plik.eof() ) { plik >> ksiazka_t[ i ].id_ks; plik >> ksiazka_t[ i ].autor; plik >> ksiazka_t[ i ].tytul; plik >> ksiazka_t[ i ].stan; ++i; } Chcę uzyskać taki sam efekt tylko za pomocą kontenerów. P.S. Wolałbym nie pisać metod w środku struktury. |
|
ison |
» 2010-08-04 18:45:07 musiałbyś dać cały kod tu masz to samo co robisz tylko na vectorach: #include <iostream> #include <fstream> #include <vector>
using namespace std;
class ksiazka { private: string id_ks, autor, tytul, stan; public: ksiazka( string new_id_ks, string new_autor, string new_tytul, string new_stan ) { id_ks = new_id_ks; autor = new_autor; tytul = new_tytul; stan = new_stan; } ksiazka() { } ~ksiazka() { } }; vector < ksiazka > ksiazki;
int main() { ifstream in( "baza_danych.txt" ); string dana1, dana2, dana3, dana4; while( in >> dana1 >> dana2 >> dana3 >> dana4 ) { ksiazki.push_back( ksiazka( dana1, dana2, dana3, dana4 ) ); } }
potem do poszczególnych komórek vectora odwołujesz się jak do zwykłej tablicy tzn |
|
Dybusek Temat założony przez niniejszego użytkownika |
» 2010-08-04 19:07:30 Dzięki ison. O taki przykład właśnie mi chodziło. Pozdrawiam serdecznie. Edit: Mam maly problem i nie wiem jak go naprawić. Zastosowałem to do Twojego wzoru lecz wyskakuje mi błąd. Nie wiem co jest nie tak. #include <iostream> #include <fstream> #include <vector>
using namespace std;
class klient { private: int id_k; string imie_k, nazwisko_k, adres_zamieszkania_k; public: klient( int new_id_k, string new_imie_k, string new_adres_zamieszkania_k ) { id_k = new_id_k; imie_k = new_imie_k; nazwisko_k = new_imie_k; adres_zamieszkania_k = new_adres_zamieszkania_k; } klient() { } ~klient() { } };
int main() { vector < klient > klient_t; ifstream plik; int dane1; string dane2, dane3, dane4; plik.open( "klient.txt" ); if( !plik.good() ) { cout << "Brak dostepu do pliku 'klient.txt'. Aby zakonczyc nacisnij ENTER"; cin.sync(); cin.get(); return 1; } else while( !plik.eof() ) { plik >> dane1; plik >> dane2; plik >> dane3; plik >> dane4; klient_t.push_back( klient( dane1, dane2, dane3, dane4 ) ); } plik.close(); plik.clear(); cin.sync(); cin.get(); }
|
|
ison |
» 2010-08-04 20:23:49 wtedy w moim poprzednim poście zrobiłem mały błąd: w while'u zamiast cin powinno być in(żeby z pliku wczytywał) taka mała literówka :p co do twojego problemu to do konstruktora przekazujesz argumenty tak jak do funkcji konstruktory możesz przeciążać tak jak funkcje. Ty próbujesz wywołać konstruktor dla: dana1,dana2,dana3,dana4 kiedy takowego nie masz. Masz konstruktor w którym przyjmujesz 3 argumenty i konstruktor bez argumentów. poprawny konstruktor dla: id,imienia,nazwiska i miejsca zamieszkania klient( int new_id_k, string new_imie_k, string new_nazwisko_k, string new_adres_zamieszkania_k ) { id_k = new_id_k; imie_k = new_imie_k; nazwisko_k = new_nazwisko_k; adres_zamieszkania_k = new_adres_zamieszkania_k; }
|
|
Dybusek Temat założony przez niniejszego użytkownika |
» 2010-08-04 20:32:49 Kurde faktycznie, że brakowało. Ale ze mnie gafa. Teraz już wszystko rozumiem. Jeszcze raz dzięki. Do zamknięcia. |
|
« 1 » |