【问题标题】:reading global istream* with getline error读取全局 istream* 并出现 getline 错误
【发布时间】:2013-10-10 13:36:36
【问题描述】:

我正在尝试使用以下代码读取全局 istream*:

/*Global Declaration*/
istream* fp;

/* in main */
ifstream iFile;
if(argc == 2)
  //open file code
  fp = &file;
else
  fp = &cin;
readFile;

/*readFile*/
readFile(){
  string line;
  while(fp.getline(line))
    cout<<line<<endl;
}

我收到以下错误代码: "在fp 中对成员getline 的请求,它属于非类类型`std::istream*' 谁能告诉我错误是什么,如果有更好的方法来解决它?我确实尝试过 getline(fp, line) 但那里也有更多错误。

【问题讨论】:

  • 顺便说一下,你要找的是std::getline,而不是std::istream::getline
  • . != -&gt; ,类似地,std::getline(fp, line) != std::getline(*fp, line)
  • 我确实尝试过,但得到以下错误:no matching function for call to `getline(std::istream*&, std::string&) 我认为我的方式有问题声明和分配文件指针,但我不知道还有什么方法可以做到这一点。
  • 顺便说一句,不需要创建fp 指针。您可以简单地将参考用作:auto &amp; fp = argc==2? file : cin;。现在fp 是一个参考。
  • Zac Howland 的解决方案不起作用吗?

标签: c++ pointers global getline istream


【解决方案1】:

您将fp 声明为指针,但尝试将其用作实例。您的 readfile 函数应如下所示:

void readFile()
{
    string line;
    while(std::getline(*fp, line)) // note the de-referencing of fp
    {
        cout<<line<<endl;
    }
}

(您的代码中还有其他几个语法错误,我假设它们只是拼写错误)。

【讨论】:

  • 我明白了。是的,我试图只从几个文件中提取相关位,所以结果有点乱,对此感到抱歉。谢谢您的帮助。我想我需要再次复习指针。
猜你喜欢
  • 2023-03-24
  • 2015-06-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 2020-10-21
  • 2016-03-31
  • 2015-06-13
相关资源
最近更新 更多