如何使用cin.getline修复“没有重载函数的实例”错误?

时间:2012-05-16 19:52:19

标签: c++ getline

string add_text()
{
    const int string_size(30);
    string add_string;
    cin.getline (add_string,string_size,'\n');
    return add_string;
}

当我用上面的函数编译程序时,我收到一个错误。请注意,我之前在程序中使用using namespace std;。如果它有助于我使用代码块,并且还尝试使用Visual Studio 11 Professional Beta编译程序。

错误:

C:\Users\Jonathan\Documents\Code_Blocks\test_12\main.cpp|32|error: no matching function for call to 'std::basic_istream<char, std::char_traits<char> ::getline(std::string&, const int&, char)'|

非常感谢任何有关此问题的帮助,谢谢!

4 个答案:

答案 0 :(得分:2)

您正在致电std::istream::getline(char *, streamsize) - 您可以看到它需要char *而不是您传递的std::string

改为使用std::getline(std::istream&, std::string&, char),如下所示:

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

答案 1 :(得分:0)

istream::getline不会将std::string作为参数,而是char*。您可以通过正确调用函数来修复它。

所以,只要您知道该行的最大尺寸:

char buff[256]; //or whatever length
cin.getline (buff,string_size,'\n');
string add_string(buff);

答案 2 :(得分:0)

请勿使用成员.getline(),而应使用全局std::getline()

会员.getline()只能使用char *作为缓冲,std::getline()可以使用std::string

答案 3 :(得分:0)

cin.getline是会员功能。因此,它不会超载以考虑存在的每种可能的类型。因此,开发人员重载全局版本(即std::getline)。