1
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

4 回答 4

3

您正在调用std::istream::getline(char *, streamssize) -您可以看到它需要 achar *而不是std::string您正在传递的。

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

getline(cin, add_string, '\n');
于 2012-05-16T19:57:57.677 回答
0

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

所以,只要你知道这条线的最大尺寸:

char buff[256]; //or whatever length
cin.getline (buff,string_size,'\n');
string add_string(buff);
于 2012-05-16T19:54:42.637 回答
0

不要使用 member .getline(),而是使用 global std::getline()

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

于 2012-05-16T19:54:45.233 回答
0

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

于 2012-05-16T19:56:12.157 回答