0

我正在努力学习 C++,但由于我还不熟悉 C++ 库和常见错误等,我仍然会遇到一些愚蠢的问题。

现在,我的以下代码失败了:

#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>

void getInt(int & val){
    string output;
    getline(cin output.c_str());
    val = atoi(output.c_str());
}

当我尝试编译它时给我这个错误:

test.cpp: In function void getInt(int&):
test.cpp:51: error: expected ) before output
test.cpp:51: error: no matching function for call to getline(std::istream&)

我究竟做错了什么?我觉得我错过了一些明显的东西。

4

3 回答 3

4

它应该是

getline(cin, output); // comma, no .c_str()

如果你这样做了,当你试图将数据读入一个的、只读的内存区域.c_str()时,你将调用未定义的行为。那是一些糟糕的魔力。当然,正如 Lightness 在评论中指出的那样,它甚至不会编译,因为它是 a并且需要 a (non- )(但即使你确实设法让它编译,理解未定义的行为也很重要)。c_str()const char*getline()char*const

于 2013-02-23T18:48:02.653 回答
3

getline有两个参数。将多个参数传递给函数时,必须用逗号分隔它们。此外,第二个参数可以是 a std::string,所以直接传递output

getline(cin, output);
于 2013-02-23T18:47:41.577 回答
2
getline(cin output.c_str());

你忘了一个逗号,skippy。

另外,您的第二个论点是错误的!字符串本身只是被调用output,只有.c_str()在需要获取 C 风格的字符缓冲区以用于 C API 时才应该应用它。即不在这里。

getline(cin, output);
于 2013-02-23T18:49:29.163 回答