【问题标题】:no matching function to call for "getline"没有匹配的函数来调用“getline”
【发布时间】:2015-08-10 22:11:22
【问题描述】:

我是 C++ 编程新手。在一个教程中,作者提到“cin”如果读取字符串中的空格会中断。如果你想让程序读入一整行带空格的字符串,你应该使用函数“getline”。

但是,我无法让它工作。

这是我的代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string my_name;

    cout << "Please enter your name: ";
    getline(cin, my_name, "\n");

    cout << "My name is " << my_name << " .";
}

我使用的 IDE 是 Xcode。错误消息是“没有匹配的函数来调用 'getline'”。

我已经搜索过类似的问题,但在我看来,没有一个解决方案适用于我的问题。也许我缺少一些知识?谢谢。

【问题讨论】:

    标签: c++


    【解决方案1】:

    complete 错误会告诉您为什么您的第三个参数类型错误。

    它应该是一个字符类型,而不是一个以 null 结尾的字符串。

    getline(cin, my_name, '\n');
    

    编辑:并且,'\n' 特别getline的另一种形式的假定分隔符:

    getline(cin, my_name);
    

    【讨论】:

    • getline(cin, my_name); 会更好
    【解决方案2】:

    你的老师说的不是真的。 cin 不会“中断”。只是将格式化提取到std::string 旨在逐字读取。那是故意的。它没有坏。

    至于您的错误,您对 std::getline 的调用被中断,因为 delimiter 参数的类型错误。 '\n'char 文字; "\n"char 数组字面量,完全不是您想要的。

    【讨论】:

    • 感谢您对 '\n' 和 "\n" 之间的区别的补充说明!
    • @NoahSong:这不是“额外的解释”;这是你问题的根本原因!
    【解决方案3】:

    为我添加这条线

    #include <fstream>
    

    【讨论】:

    • 对我不起作用,#include 也不起作用
    • 开个玩笑,我发现这是因为我声明文件的方式。我将其声明为“ofstream”而不是“fstream”啊哈哈
    【解决方案4】:

    如果将其更改为 char 数组,则可以使用:

    cin.getline(my_name, val_max);
    

    只要确保你的缓冲区 (val_max) 足够大

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 2018-10-09
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2020-10-21
      相关资源
      最近更新 更多