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 11ProfessionalBetaを使用してプログラムをコンパイルしてみました。

エラー:

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 *、streamsize)を呼び出しています-渡したchar *のではなく、が必要であることがわかります。std::string

代わりに、次のようにstd :: getline(std :: istream&、std :: string&、char)を使用します。

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

istream::getlinestd::stringas パラメーターは使用しませんが、 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 に答える