Как исправить ошибку «Нет экземпляра перегруженной функции» с помощью cin.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.

Ошибка:

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)'|

Любая помощь в этом вопросе будет принята с благодарностью, заранее спасибо!


person Jon S    schedule 16.05.2012    source источник
comment
en.cppreference.com/w/cpp/io/basic_istream/getline   -  person hmjd    schedule 16.05.2012


Ответы (4)


Вы вызываете std::istream::getline(char *, streamsize) - вы можете видеть, что для этого требуется char * вместо std::string, которое вы передаете.

Используйте std::getline(std::istream&, std::string&, char) вместо этого, вот так:

getline(cin, add_string, '\n');
person Useless    schedule 16.05.2012

istream::getline принимает не std::string в качестве параметра, а char*. Вы можете исправить это, вызвав функцию правильно.

Итак, если вы знаете максимальный размер строки:

char buff[256]; //or whatever length
cin.getline (buff,string_size,'\n');
string add_string(buff);
person Luchian Grigore    schedule 16.05.2012
comment
Это также очень хороший ответ, интересно, что вы думали о максимальном размере строки, о котором я еще не подумал. - person Jon S; 17.05.2012

Используйте не элементы .getline(), а глобальные std::getline().

Участник .getline() может использовать только char * в качестве буфера, а std::getline() может использовать std::string.

person Griwes    schedule 16.05.2012

cin.getline является функцией-членом. Таким образом, он не перегружен для учета всех возможных существующих типов. Итак, разработчики перегружают глобальную версию (т. е. std::getline).

person Ed S.    schedule 16.05.2012