将文件读入类对象的向量中

时间:2018-05-01 11:29:47

标签: c++ class object vector

我根据我在这里的众多论坛和书籍上阅读的内容进行了几次尝试。有关此作业的更多详细信息,请参阅更多代码:Click- another question from StackOverflow

我需要做的是使用CHotel对象创建一个文件并将其插入此向量m_hoteli中。

至于为什么它不起作用,它要么不从文件中读取字符串,要么根本不填充向量。 这是我的档案:

  

“Marina”5 500

     

“郁金香”4 400

     

“BlackSea”3 300

     

“SwissBell”5 600

class CComplex:CHotel
{

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

    CComplex(string filename, string nComplex)
    {


        fstream file("filename.txt", ios::in);
        CHotel temp(" ",0,0);
        while (file >> temp)
        {
            m_hoteli.push_back(temp);
        }
/* Second try:
m_complex = nComplex;

        fstream in;
        in.open(filename, ios::in);
        string s;
        while (getline(in, s))
        {
            CHotel h1(s);
            m_hoteli.push_back(h1);
    }

Third try:
m_complex = nComplex;
        ifstream iStream(filename);
        if (iStream.good())
        {
            copy(istream_iterator<CHotel>(iStream), istream_iterator<CHotel>(), back_inserter(m_hoteli));

            }
        }

*/


    }

这是CHotel代码:

class CHotel : public CTurist
{
protected:

    string hName;
    int stars;
    int beds;
    map<CTurist, unsigned> Turisti;

public:
    unsigned Sum = 0;
    int br = 0;
    CHotel(){};

    CHotel(string hName2, int zvezdi, int legla)
    {
        hName = hName;
        stars = zvezdi;
        beds = legla;
    }


    friend istream& operator>>(std::istream& is, CHotel& e)
    {
        is >> e.hName >> e.stars >> e.beds;;

        return is;
    }

我只是在main中执行此操作:CComplex c1(“filename.txt”,“Complex1”);

1 个答案:

答案 0 :(得分:0)

你没有在CComplex构造函数中使用filename参数,除了你的代码应该工作。

        fstream file(filename, ios::in);

你知道如何调试吗? Here is some info on debugging

以下是您的完整代码,唯一的更改是filename参数,现在该文件应放在c:\ temp。

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <fstream>

using namespace std;

class CTurist
{
protected:
    string tName;
    int age;

public:
    CTurist() {};

    CTurist(string name, int age2)
    {
        tName = name;
        age = age2;
    }


    bool operator<(const CTurist& e) const
    {
        return age < e.age;
    }

    friend ostream& operator<<(ostream& os, const CTurist&& e);
    friend ifstream& operator>>(ifstream& is, CTurist&& e);
};

class CHotel : public CTurist
{
protected:

    string hName;
    int stars;
    int beds;
    map<CTurist, unsigned> Turisti;

public:
    unsigned Sum = 0;
    int br = 0;
    CHotel() {};

    CHotel(string hName2, int zvezdi, int legla)
    {
        hName = hName;
        stars = zvezdi;
        beds = legla;
    }


    friend istream& operator>>(std::istream& is, CHotel& e)
    {
        is >> e.hName >> e.stars >> e.beds;;

        return is;
    }
};

class CComplex :CHotel
{

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

    CComplex(string filename, string nComplex)
    {


        fstream file(filename, ios::in);
        CHotel temp(" ", 0, 0);
        while (file >> temp)
        {
            m_hoteli.push_back(temp);
        }
    }
};

int main()
{
    CComplex c1("C:\\temp\\file.txt", "Complex1");
    system("pause");
    return 0;
}

尝试在main中添加断点,并使用f11和f10

逐步执行程序