0

私はC++の学習に取り組んでいますが、C ++ライブラリや一般的なエラーなどにまだ慣れていないため、まだ愚かな問題に直面しています。

現在、私のコードの次の部分は失敗します:

#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>

void getInt(int & val){
    string output;
    getline(cin output.c_str());
    val = atoi(output.c_str());
}

コンパイルしようとすると、このエラーが発生します。

test.cpp: In function void getInt(int&):
test.cpp:51: error: expected ) before output
test.cpp:51: error: no matching function for call to getline(std::istream&)

私は何が間違っているのですか?明らかな何かが欠けているような気がします。

4

3 に答える 3

4

そのはず

getline(cin, output); // comma, no .c_str()

実行すると、メモリの読み取り専用領域に.c_str()データを読み込もうとすると、未定義の動作が発生します。それはいくつかの悪いモジョです。もちろん、Lightness がコメントで指摘しているように、 is であり、 (non- ) が必要なため、コンパイルすらできません(ただし、コンパイルできたとしても、未定義の動作を理解することが重要です)。c_str()const char*getline()char*const

于 2013-02-23T18:48:02.653 に答える
3

getline2 つの引数を取ります。複数の引数を関数に渡す場合は、コンマで区切る必要があります。さらに、2 番目の引数は である可能性があるため、直接std::string渡すだけです。output

getline(cin, output);
于 2013-02-23T18:47:41.577 に答える
2
getline(cin output.c_str());

コンマを忘れた、スキッピー。

また、あなたの2番目の引数は間違っています! 文字列自体は と呼ばれるだけで、C API で使用する C スタイルの文字バッファーを取得する必要がある場合にoutputのみ適用する必要があります。.c_str()つまり、ここではありません。

getline(cin, output);
于 2013-02-23T18:49:29.163 に答える