Чтение из файла в вектор - PullRequest
0 голосов
/ 01 мая 2018

Я читаю из файла с данными ниже. В конце мне нужно заполнить вектор m_hoteli объектами CHotel, в которых есть объекты CTurist. 2–5 ряды - это отели с их переменными, и после больших чисел (500 400 300 600) это туристы в каждом отеле.

Когда я запускаю его, мои векторы заполняются информацией из файла, но заполняет сведения о туристах как данные отеля, поэтому я не могу установить правильную связь между входом и CTurist.

Марина 5 500 Джо 21 1 Тишо 20 6 Виктория 31 20

Тюльпан 4 400 Сара 41 17 Росица 49 14 Валерия 24 2

BlackSea 3 300 Джон 35 12 Джон 35 11 Янни 28 6

SwissBell 5 600 Орлин 26 1 Маргарита 27 2 Джульетта 31

class CComplex:CHotel
{

protected:
    string m_complex;
    vector<CHotel> m_hoteli;
public:
    CComplex(){};

CComplex(string filename, string nComplex)
{
    string str;
    m_complex = nComplex;
    fstream file(filename, ios::in);
    if (file.is_open())
    {
        CHotel temp(" ", 0, 0);
        while (file >> temp)
        {
            m_hoteli.push_back(temp);

        }
        file.close();
    }
    else
        throw "ERROR! ";
        }

Конструктор CHotel (String stringname):

class CHotel : public CTurist          //втори клас, наследник на CTurist
{
protected:

    string hName;    //име хотел
    int stars;          //звезди на хотела
    int beds;           //брой легла

public:
    map<CTurist, unsigned> Turisti; 
        unsigned Sum = 0;
    int br = 0;
    CHotel(){};
    CHotel(string s)
        {
            map<CTurist, unsigned> TR;

            bool first = true;
            istringstream TList(s);
            int i = 0;

            while (getline(TList, s, ' '))
            {
                switch (i)
                {
                case 0: this->setName(s); break;
                case 1: this->setAge(stoi(s)); break;
                }

                if (i ==2 )
                {
                    if (!first){ setName(getName()); setAge(getAge()); first = true; }
                    else{ TR[CTurist("", 0)]; }
                    i = -1;
                }
                i++;
            }
            Turisti = TR;
        }

1 Ответ

0 голосов
/ 02 мая 2018

Я думаю, что это прогресс, достигнутый в конструкторе. Просматривая контрольные точки, отель получает информацию, также известную как название, звезды и места, а туристы - нет. Любые советы?
Отель (строка s) {

    CTurist b("",0);
    bool first = true;

    istringstream TList(s);

    string Days;
    int i = 0;
    string ime;
    string godini;

    if (first == true)
    {

    while (getline(TList, s, ' '))
    {
        switch (i)
        {
        case 0: this->hName = s; break;
        case 1:this->stars = stoi(s); break;
        case 2:this->beds = stoi(s); break;

        }
        i++;
        if (i == 3)break;

    }
    first = false;
    i = 0;
}
    while (getline(TList, s, '|'))
    {
        switch (i)
        {

        case 0: ime = s; break;
        case 1: godini = s; break;
        case 2: Days = s; break;


        }
        i++;
        if (i == 3)
        {
            CTurist T1("ime", stoi(Days));
            //Turisti.insert(pair<CTurist,unsigned>("ime", stoi(Days))); 


                i = 0;
            }
        }
    }

Как вставить T1 в mapTuristi ???

...