2012-04-16 26 views
3

これはなぜ動作しないのか分かりません。それが助け場合、私は、Visual Studio2010 C++ ExpressでこれをやっているCinにオペランドがありません>>

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

:何らかの理由で私はエラーを取得しています。わからない、なぜその私がcinを使用して他のプログラムを行ってきた。このエラーを...渡す

マイコード:

あなたは、その関数が定義されている場所である、 <string>を含めるのを忘れて
#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; 
    } 
} 
+6

'#include ' –

答えて

6

は、その上で

<string>が含ま私はあなたの入力の最初の単語で停止しますgetlineの代わりとして>>を使用することをお勧め。

例:

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

結果が「C:\ Users \ユーザーアンドリュー」であるデータが改行されるまでに消費されていないと、次のstd ::文字列の読み取りが自動的に消費されることを考えると、かなり予想外そしてこれは、改行までのすべてのテキストを消費します "Finnell \ Documnts \ MyFile.txtを"

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

でいっぱい。

+0

+1その呼び出しで。 –

+0

">>はstd :: string'sでうまく動作しません"とはどういう意味ですか? –

+0

@EdS。ありがとうございました。 –

1

。各タイプは、ストリームを介した操作のための静的関数として独自のoperator>>を定義しています。将来作成される可能性のあるすべての型を説明するために入力ストリームを書き込むことはできないため、この方法で拡張されます。

関連する問題