我很抱歉初学者问题,但我不明白ifstream出了什么问题。是不是可以将它发送到像指针这样的函数(见下文)?
这个想法是作为副作用我希望ifstream在调用函数时继续前进,因此尝试将其作为指针发送。
string ID, Title, Body;
ifstream ifs(filename); // std::string filename
while(ifs.good()) {
ID = findCell(ifs)
Title = findCell(ifs)
Body = findCell(ifs)
}
}
std::string findCell(ifstream *ifs) // changed to &
{
char c;
bool isPreviousQuote;
string str;
while(ifs.good())
{
ifs.read(c, 1); // error now shows up here
if (c == "\n") {
break;
}
str.push_back(c);
}
return str;
}
错误是:
invalid user-defined conversion from 'std::ifstream {aka std::basic_ifstream<char>}'
to 'std::ifstream* {aka std::basic_ifstream<char>*}' [-fpermissive]
答案 0 :(得分:4)
您的函数采用指向std::ifstream
对象的指针:
std::string findCell(ifstream *ifs)
指针应使用它们指向的内存块的地址进行初始化
在这种情况下,使用ifs
检索&
的地址:
Title = findCell(&ifs);
然而,由于findCell
函数需要ifstream
的存在,因此更好,通过引用传递更清晰,更合理:
std::string findCell(std::ifstream& ifs) { ... }
...
Title = findCell(ifs);