如何修复 cin.getline 的"No instance of overloaded function"错误?


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:UsersJonathanDocumentsCode_Blockstest_12main.cpp|32|error: no matching function for call to 'std::basic_istream<char, std::char_traits<char> ::getline(std::string&, const int&, char)'|

此问题的任何帮助将不胜感激,提前感谢!

你正在调用 std::istream::getline(char *, streamsize( - 你可以看到它需要一个char *而不是你传递的std::string

改用 std::

getline(std::istream&, std::string&, char(,如下所示:

getline(cin, add_string, 'n');
istream::getline

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

因此,只要您知道行的最大尺寸:

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

不要使用 member .getline() s,而是全局std::getline()

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

cin.getline是一个成员函数。 因此,它不会过多地解释存在的每种可能类型。 因此,开发人员重载全局版本(即std::getline(。

相关内容

最新更新