传递std :: ifstream作为指针

时间:2013-09-16 23:57:50

标签: c++ pointers parameter-passing pass-by-reference ifstream

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

1 个答案:

答案 0 :(得分:4)

您的函数采用指向std::ifstream对象的指针:

std::string findCell(ifstream *ifs)

指针应使用它们指向的内存块的地址进行初始化 在这种情况下,使用ifs检索&的地址:

Title = findCell(&ifs);

然而,由于findCell函数需要ifstream的存在,因此更好,通过引用传递更清晰,更合理:

std::string findCell(std::ifstream& ifs) { ... }
...
Title = findCell(ifs);