2012-04-16 3 views
3

Я не понимаю, почему это не работает. По какой-то причине, я получаю сообщение об ошибке:Cin не имеет операнда >>

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

Я делаю это в Визуальная 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; 
    } 
} 
+6

'#include ' –

ответ

6

включают <string>

Кроме того, я предлагаю вам использовать GetLine вместо как >> остановится на первом слове в вашем входе.

Пример:

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

В результате «C: \ Users \ Andrew», совершенно неожиданно, учитывая, что данные не потребляется до конца строки, а следующий станд :: строка для чтения будет автоматически потребляться и заполненный "Finnell \ Documnts \ MyFile.txt"

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

Это будет потреблять весь текст до символа новой строки.

+0

+1 от меня по этому звонку. –

+0

Что вы подразумеваете под «>> не работает с std :: string?»? –

+0

@EdS. Спасибо. –

1

Вы забыли включить <string>, который является, где эта функция определена. Помните, что каждый тип определяет свой собственный operator>> как статическую функцию для манипулирования потоком. входной поток не может быть написан для учета всех типов, которые могут быть созданы в будущем, поэтому он расширяется таким образом.