Tworzenie obiektu z pliku txt

Odpowiedz Nowy wątek
2014-12-27 10:39
Niebieski Karp
0

Witam pisze program na zajęcia, w którym na podstawie pliku tekstowego (coś w rodzaju bazy danych) chcę utworzyć zawartość kontenera. Znaczy kontener vector zawiera wskaźniki na obiekty klasy, a te obiekty tworzę z pliku tekstowego. Oczywiście chcę też móc dopisywać do pliku i kasować z pliku. Może kod lepiej zobrazuje o co mi chodzi:

main:

#include "bureau.h"
 
#include <iostream>
 
int main()
{
    std::cout << "Hello World!" << std::endl;
    Bureau *bureau = new Bureau();
    bureau->load_cars_from_txt();
    bureau->show_cars();
    delete bureau;
    return 0;
}
 

Vehicle.h :

 #ifndef VEHICLE_H
#define VEHICLE_H
 
#include <string>
 
class Vehicle
{
    friend class Bureau;
private :
    static int id;
    int year;
    std::string marque, model;
    double price;
public:
    Vehicle();
    Vehicle(int, std::string, std::string, int, double);
    ~Vehicle();
    std::string to_string();
};
 
#endif // VEHICLE_H

Vehicle.cpp :

 #include "vehicle.h"
#include <iostream>
#include <sstream>
 
int Vehicle::id = 1;
 
Vehicle::Vehicle()
{
}
 
Vehicle::Vehicle(int id, std::string marque, std::string model, int year, double price)
{
    this->id = id;
    this->marque = marque;
    this->model = model;
    this->year = year;
    this->price = price;
}
 
Vehicle::~Vehicle()
{
}
 
std::string Vehicle::to_string()
{
    std::stringstream ss;
    std::string strings;
    ss << id << " " << marque << " " << model << " " << year << " " << price;
    strings = ss.str();
    return strings;
 
}

Bureau.h :

#ifndef BUREAU_H
#define BUREAU_H
 
#include "vehicle.h"
 
#include <vector>
 
class Bureau
{
private:
    std::vector <Vehicle*> cars;
    Vehicle *car;
public:
    Bureau();
    ~Bureau();
    void load_cars_from_txt();
    void add_car();
    void show_cars();
 
    friend class Vehicle;
};
 
#endif // BUREAU_H
 

Bureau.cpp :

#include "bureau.h"
#include "vehicle.h"
 
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
 
using std::cout;
using std::cin;
using std::endl;
//std::vector <Vehicle*> cars;
std::ofstream out;
std::ifstream in;
 
Bureau::Bureau()
{
    //load_cars_from_txt();
}
 
Bureau::~Bureau()
{
    cout << "Game Over!" << endl;
}
 
void Bureau::load_cars_from_txt()
{
    in.open("data.txt", std::ios::in);
    std::stringstream ss;
    int id, year;
    std::string marque, model, strings;
    double price;
    do
    {
        getline(in, strings);
        ss << strings;
        ss >> id >> marque >> model >> year >> price;
        ss.clear();
        //cout << numer << naz << endl;
        car = new Vehicle(id, marque, model, year, price);
        cars.push_back(car);
    } while (!in.eof());
    //samochody.erase(samochody.begin());
    cars.pop_back();
    in.close();
}
 
void Bureau::add_car()
{
    int id, year;
    std::string marque, model;
    double price;
    out.open("data.txt", std::ios::out | std::ios::app);
    std::ostream & seekp(std::streamoff eof);
    cout << "Podaj marke: ";
    cin >> marque;
    cout << "Podaj model: ";
    cin >> model;
    cout << "Podaj rok: ";
    cin >> year;
    cout << "Podaj cene: ";
    cin >> price;
    cout << endl;
    id = cars.size() + 1;
    out << id << " " << marque << " " << model << " " << year << " " << price;
    //cout << nr << " " << naz << endl;
    car = new Vehicle(id, marque, model, year, price);
    cars.push_back(car);
    std::ostream & seekp(std::streamoff eof);
    out.close();
}
 
std::ostream &operator << (std::ostream &os, Vehicle &u) {
    return os << u.to_string();
}
 
void show_cars()
{
    for (size_t i = 0; i < cars.size(); i++)
    {
        cout << *(cars[i]) << endl;
    }
}
 

Problem pojawia się w metodzie

show_cars

, kompilator wywala mi błąd, że nie ma cars


 znaczy kontenera. Ale dlaczego?
mszczą się na tobie obiekty globalne - spartanPAGE 2014-12-27 10:45

Pozostało 580 znaków

2014-12-27 10:53
Niebieski Karp
0

ale dlaczego jedna metoda nie działa a druga działa? Gdzie mam obiekty globalne? Przejrzałem kod i nie mogę znaleźć

Pozostało 580 znaków

2014-12-27 10:54
1
void Bureau::show_cars()
{
    for (size_t i = 0; i < cars.size(); i++)
        cout << *(cars[i]) << endl;
}
edytowany 1x, ostatnio: mateusz2813, 2014-12-27 10:56

Pozostało 580 znaków

2014-12-27 11:11
0
void show_cars()
{
    for (size_t i = 0; i < cars.size(); i++)
    {
        cout << *(cars[i]) << endl;
    }
}

To jest funkcja - nie metoda klasy Bureau!

edytowany 1x, ostatnio: spartanPAGE, 2014-12-27 11:12

Pozostało 580 znaków

2014-12-27 11:23
Niebieski Karp
0

Kardynalny błąd zrobiłem... Dzięki wam. Program się kompiluje, jednak po odpaleniu nic się nie dzieje oprócz "hello word" czyli nie wczytało pliku tekstowego. Program tworzę pod qt i plik umieściłem w folderze projektu...

Pozostało 580 znaków

2014-12-27 11:26
0

Albo kod albo do wróżbitów.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-27 11:29
Niebieski Karp
0

Kod jest u góry. Jedynie zmieniłem

void show_cars() 

na void Bureau::show_cars()


Problem ten mam przy użyiu qt. W visualu 2013 uruchamia się bez problemu. Kontynuowałbym w visualu jednak na zajęciach używamy qt...

Pozostało 580 znaków

2014-12-27 11:45
Niebieski Karp
0

Gdy plik wrzucę do folderu release i odpalę przez exe to działa, a gdy przez kompilator próbuję otworzyć to nie :/

Pozostało 580 znaków

2014-12-27 11:59
0

http://stackoverflow.com/ques[...]aths-in-visual-studio-project


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-27 12:06
Niebieski Karp
0

Nie mam problemu z visualem, tylko z qt. Gdy plik wrzucę na C i dam ściężkę : "C:\data.txt" to działa ale jak już przeniosę na inny dysk to nie... Nie rozumiem czemu

Pozostało 580 znaków

2014-12-27 12:09
0

Problem jest dokładnie ten sam, wyświetl sobie bieżący folder.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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