1. ホーム
  2. c++

[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない

2022-01-19 10:17:50

質問

知っている......知っている この質問は以前にもありましたが、全ての回答を見ましたが、私の問題を解決してくれるものはないようです。ファイル内の行の内容を取得するためにgetline関数を使用すると、それが動作しません。

getline(file, line);

'File'がここで宣言されています。

ifstream File;
File.open("fruit.txt");

と'line'がここで宣言されています。

int line = 0;

Getlineには、このメッセージとともに赤い下線が引かれています。

getline
no instance of overloaded function "getline" matches the argument list
argument types are :(std::ifstream, int)

この意味は、ファイルストリームと整数の引数リストを持つgetlineのインスタンスはない、ということです。

この件に関する他のすべての質問には、まさにそのように書かれているので、これは意味がありません、引数 には、ファイルストリームと整数を指定します。

何が間違っているのでしょうか?

EDIT

以下は、コードの全文です。

ifstream fruitFile;
fruitFile.open("fruit.txt");
int line = 0;
int C_FRUIT = getline(fruitFile, line);
fruitFile.close();

1行目は数字にする必要があります。

どのように解決するのですか?

getline() は1行のテキストを読みます。 intを直接読み込むことはできません。 そのため、エラーメッセージが表示されます。

が2つあることを認識する必要があります。 getline() . 1つは istream::getline()std::getline() . どちらも異なるシグネチャを持っています。 前者はストリームのメンバ関数で,ストリームヘッダで定義される。後者は <string> ヘッダがあります。

しかし、注意してください。 std::getline()int ! これはストリーム参照です。 そのため、2つ目のコンパイラーエラーが発生します。

最後に、もし整数xを読みたいなら、エクストラクタを使うのが簡単だ。

int value; 
fruitFile >> value; 
fruitFile.ignore(SIZE_MAX, '\n');   // in case you'd need to go to next line

あるいは、どうしてもintを一行で読みたいという場合。

string line;
getline(fruitFile, line); 
stringstream sst(line);     // creates a string stream: a stream that takes line as input
sst >> value;