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)'|
对此问题的任何帮助将不胜感激,提前感谢!
你正在调用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);
不要使用成员.getline()
s,但全球std::getline()
。
成员.getline()
s只能使用char *
作为缓冲,而std::getline()
可以使用std::string
。
cin.getline
是会员功能。因此,它不会超载以考虑存在的每种可能的类型。因此,开发人员重载全局版本(即std::getline
)。