0

对于初学者的问题,我很抱歉,但我不明白 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]
4

1 回答 1

4

您的函数需要一个指向std::ifstream对象的指针:

std::string findCell(ifstream *ifs)

指针应该使用它们将指向的内存块的地址来初始化。
在这种情况下,使用以下方式ifs检索地址&

Title = findCell(&ifs);

然而更好的是,因为findCell函数需要存在ifstream,所以通过引用传递更加清晰和合理:

std::string findCell(std::ifstream& ifs) { ... }
...
Title = findCell(ifs);
于 2013-09-17T00:05:49.387 回答