【问题标题】:Compiling error while using getline(): 'mismatched types'使用 getline() 时编译错误:'不匹配的类型'
【发布时间】:2018-12-23 19:56:34
【问题描述】:

我不断收到这个错误(这是一个很长的错误,但我认为最重要的部分是这个):

main.cpp:9:30: note:   mismatched types 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>' and 'const char [2]'

在编译这段代码时:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string x = getline(cin, " ");
    return 0;
}

错误中的行与我在这里提出的代码中的行不匹配,因为我在 Stack Overflow 编辑器中编写代码时不知道如何创建新行;我是新来的 ;) 无论如何,错误指向声明 string x 的行。

基本上我想要这段代码做的是从用户那里得到一行,直到他/她点击空格。也许我从一开始就做错了什么,所以我愿意接受解决这个问题的建议。 (我对C++不是很熟练,只是要求我的老师使用这种语言完成一项任务。)谢谢,

安东尼

【问题讨论】:

  • 为什么要在std::getline() 的第二个参数中使用" "?你觉得它有什么作用?
  • 您是否阅读了参考资料:en.cppreference.com/w/cpp/string/basic_string/getline?看来你不明白要传递什么参数(或者返回值是什么)
  • @Fureeish 没关系,我刚刚找到了问题的根源。我只是记错了getline公式;我无法将 getline() 的返回值分配给变量,我必须执行 getline(cin, x, ' '),之前声明了字符串 x 才能使其工作。
  • 谢谢大家这么快回信,我设法解决了这个问题。

标签: c++ c++11 getline template-argument-deduction


【解决方案1】:

std::getline() 的第二个参数是对接受读取数据的std::string 变量的引用。函数返回值中没有输出字符串。

另外,std::getline() 不接受字符串作为分隔符。它只需要一个字符。

试试这个:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string x;
    getline(cin, x, ' ');
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多