作为较大任务的一部分,我必须在一个类中创建一个方法,该方法可以读取五行数据,然后将该数据放入动态创建的对象中。我不确定如何将五行数据分别放入对象中。该代码应有助于更好地解释,但不能按预期工作。如果有人可以发现我的错误,请告诉我。如果您能帮助我,将不胜感激。同样,每五行读取一次,我创建一个新对象,直到没有剩余行。我怎么知道是否还剩几行?再次感谢您的帮助,谢谢您的宝贵时间。

    inline void readFromFile(const string& fileName){

        string title;
        string category;
        unsigned int runningTime;
        unsigned int yearOfRelease;
        double price;

        ifstream myReadFile;
        myReadFile.open(fileName);

        while( myReadFile )
        {
            myReadFile>>title;
            myReadFile >> category;
            myReadFile >> runningTime;
            myReadFile >> yearOfRelease;
            myReadFile >> price;

            v.push_back(new DVD(title,category,runningTime,yearOfRelease,price));
        }

        myReadFile.close();

        for(unsigned int i = 0; i < v.size(); i++){

            cout << *v.at(i) << endl;

        }

    }

最佳答案

问题在于带有字符串的运算符>>仅读取一个单词(而不是一行)。

您需要使用std :: getline()函数。

       std::getline( myReadFile, title);
       std::getline( myReadFile, category);
       std::getline( myReadFile, runningTime);
       std::getline( myReadFile, yearOfRelease);
       std::getline( myReadFile, price);


为了方便起见,您应该为DVD写一个运算符>>

std::istream& operator>>(std::istream& str, DVD& data)
{
    // Read data into data here
    return str;
}


现在,您的循环变得更容易编写:

std::copy(std::istream_iterator<DVD>(myReadFile),
          std::istream_iterator<DVD>(),
          std::back_inserter(v)
         );

10-08 13:13