【问题标题】:Using getline() to read in lines from a text file and push_back into a vector of objects使用 getline() 从文本文件中读取行并将 push_back 放入对象向量中
【发布时间】:2014-04-18 21:19:18
【问题描述】:

当涉及到类和对象时,我在弄清楚如何正确使用 getline() 时遇到问题。我需要阅读string 类型的行,然后使用push_back 将它们添加到myVec 向量中。这是我目前拥有的:

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 已经实现。

感谢您的帮助。

【问题讨论】:

    标签: c++ class object vector getline


    【解决方案1】:

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

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

    如果你想根据你读到的字符串给向量添加一个myClass元素,你必须先构造它,然后再推回去。

    【讨论】:

      【解决方案2】:

      假设类 myClass 已经实现。

      这没有用,我们不能仅仅假设它已经实现并且知道它的接口是什么或如何使用它,所以我们无法回答您的问题。

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

      假设您可以从std::string 构造一个myClass,这将起作用(注意它读入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;
      }
      

      【讨论】:

      • 谢谢,我在发帖后不久就意识到了我的错误。 myClass m(line) 的行是什么?
      猜你喜欢
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多