我是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);
我一般不明白这是如何工作的,所以任何帮助都会受到高度赞赏
答案 0 :(得分:1)
该值是对实例化std::istream
对象的std::ifstream file
超类的引用。
没有。 file
函数的范围内没有readnext()
个对象可见。代码是正确的。 str
是std::istream &
的{{1}}参数,并将第一个参数的类型与readnext()
相匹配。