3

なぜこれが機能しないのかわかりません。何らかの理由でエラーが発生します:

error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)

それが助けになるなら、私はVisual Studio2010 C++Expressでこれを行っています。なぜ私がこのエラーを私に渡したのかわからない私は他のプログラムを使ってcin...

私のコード:

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

int main(int argc, char* argv){
    string file;

    if (argc > 1)
    {
        file = argv[1];
    }
    else
    {
        cout << "Please Enter Your Filename: ";
        cin >> file;
    }
}
4

2 に答える 2

6

含む<string>

その上、>>は入力の最初の単語で停止するため、代わりにgetlineを使用することをお勧めします。

例:

std::cin >> file; // User inputs C:\Users\Andrew Finnell\Documents\MyFile.txt

結果は「C:\ Users \ Andrew」です。これは、データが改行まで消費されないことを考えるとまったく予想外であり、次のstd :: string読み取りは自動的に消費され、「Finnell \ Documnts\MyFile.txt」で埋められます。

std::getline(std::cin, file); 

これにより、改行まですべてのテキストが消費されます。

于 2012-04-16T23:23:36.080 に答える
1

<string>その関数が定義されている場所であるを含めるのを忘れました。operator>>各タイプは、ストリームを介した操作のための静的関数として独自に定義していることに注意してください。入力ストリームは、将来作成される可能性のあるすべてのタイプを考慮して記述できない可能性があるため、このように拡張されます。

于 2012-04-16T23:21:26.450 に答える