使用getline()从文本文件读取行,将push_back读入对象向量

时间:2014-03-13 20:44:43

标签: c++ class object vector getline

我遇到的问题是如何在类和对象方面正确使用getline()。我需要阅读string类型的行,然后使用myVec将其添加到push_back向量中。这就是我现在所拥有的:

vector<myClass> read_file(string filename)
{
    vector<myClass> myVec;
    myClass line;
    ifstream inputFile(filename);
    if (inputFile.is_open())
    {
        while (inputFile.getline(inputFile, line)) // Issue it here.
        {
            myVec.push_back(line);
        }
        inputFile.close();
    }
    else
        throw runtime_error("File Not Found!");

    return myVec;
}

假设已经实现了类myClass

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您对getline的使用与签名不匹配 - 您的参数类型错误。

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

如果要根据您阅读的字符串向向量添加myClass元素,则必须先构造它,然后再将其推回。

答案 1 :(得分:1)

  

假设课程myClass已经实施。

这没有帮助,我们不能假设它已经实现并知道它的界面是什么或如何使用它,所以我们无法回答你的问题。

为什么您希望std::ifstream知道如何使用myClass?为什么要将inputFile作为参数传递给inputFile的成员函数?您是否查看过显示如何使用getline

的任何文档或示例

假设您可以从myClass构建std::string,这将有效(请注意它会读到string并注意您不需要手动关闭文件):

vector<myClass> read_file(string filename)
{
    ifstream inputFile(filename);
    if (!inputFile.is_open())
        throw runtime_error("File Not Found!");

    vector<myClass> myVec;
    string line;
    while (getline(inputFile, line))
    {
        myClass m(line);
        myVec.push_back(m);
    }

    return myVec;
}