ifstream-istream和函数调用

时间:2016-10-16 13:16:49

标签: c++ ifstream istream

我是c ++的新手,当我使用流时,我看到了以下代码:

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

class Results
{
    public:

        string const& operator[](int index) const
        {
            return m_data[index];
        }
        int size() const
        {
            return m_data.size();
        }
        void readnext(istream& str)
        {
            string line;
            getline(str, line);
            cout << "line :" << line <<endl;

            stringstream lineStream(line);
            string cell;

            m_data.clear();
            while(getline(lineStream, cell, ','))
            {
                m_data.push_back(cell);
                cout << cell<<endl;
            }

        }
    private:
        vector<string> m_data;
};



istream& operator>>(istream& str, Results & data)
{

    data.readnext(str);
    return str;
}   



int main()
{
    ifstream file("filename.txt");
    Results r1;
    while(file >> r1)
    {
        cout << "1st element: " << r1[3] << "\n";
    }
}

当致电data.readnext(str)时: 1)作为参数传递的str的值是多少?当我打印出来时,我得到0x7ffd30f01b10这是一个地址。 2)在函数getline(str, line);中给出行文件第一行的值。我不明白为什么。不应该是getline(file, line); 我一般不明白这是如何工作的,所以任何帮助都会受到高度赞赏

1 个答案:

答案 0 :(得分:1)

  1. 该值是对实例化std::istream对象的std::ifstream file超类的引用。

  2. 没有。 file函数的范围内没有readnext()个对象可见。代码是正确的。 strstd::istream &的{​​{1}}参数,并将第一个参数的类型与readnext()相匹配。