2014-01-09 2 views
8

Я работал над проектом C++ в режиме консоли visual studio 2012, и я продолжаю получать эту странную постоянную ошибку с помощью функции cin.cin >> «оператор не соответствует этим операндам»

Под >> Я получаю красную линию, и программа сообщает мне no operator matches these operands. Я инициализировал все элементы массива отдельным методом.

Вот пример фрагмента (Реальный код содержит много больше переменных):

for (int i = 0; i < 14; i++) 
{ 
    cout << "For taxi: " << i+1 << "Please input the taxi rank they are currently parked at, if at all ('Train Station', 'South Walls' or 'Chell Road')" << endl; 
    cin >> allTaxiDetails[i].taxiRank; 
} 

allTaxiDetails представляет собой массив, типа данных "taxiDetails", который является эта структура:

struct taxiDetails { 
    string taxiDriverSurname; 
    int taxiID; 
    int taxiCoordinates; 
    int numberOfSeats; 
    bool taxiContainsCustomerYesNo; 
    bool WheelChairAccessibleVehicle; 
    string taxiRank; 
    fareDetails fareDetailsForTaxi; 
    bool taxiAvaliable; 
}; 
+4

Информация не достаточна. Каков тип 'allTaxiDetails [i] .taxiRank'? –

+0

allTaxiDetails представляет собой массив данных типа «taxiDetails», который составляет эту структуру: struct taxiDetails { string taxiDriverSurname; int taxiID; int taxiCoordinates; int numberOfSeats; bool taxiContainsCustomerYesNo; bool WheelChairAccessibleVehicle; строка таксиRank; тариф за упаковкуДетали дляForTaxi; bool taxiAvaliable; }; – user3163612

+0

Возможный дубликат [Erorr: no operator ">>" соответствует этим аргументам] (http://stackoverflow.com/questions/10004499/erorr-no-operator-matches-these-arguments) – Mgetz

ответ

6

Кажется, вы пытаетесь прочитать объект типа std::string, для которого вы каким-то образом получили определение класса (например, включив <iostream>), но вы не получили все необходимые операции! Убедитесь, что вы в том числе <string>:

#include <string> 
// ... 

Это довольно часто, что некоторые заголовки содержат определение некоторых других классов, но на самом деле не использовать весь заголовок, чтобы получить определение. Поскольку std::string в некоторых местах, необходимых для объявления IOStreams, довольно вероятно, что он будет определен, но, вероятно, не включит его полный заголовок.

+0

Он не пытается читать во всей структуре,' taxiRank' - это строка. – Keeler

+0

О, хорошая точка. ответ ... –

+0

Спасибо, ребята, =) Я попробую ваши предложения сейчас и обратную связь как можно скорее. – user3163612

19

Издание говорит, что string не метод operator>>, но это делает ...

  1. Вы забыли #include <string> в верхней части этого файла?
  2. Возможно, попробуйте использовать getline(std::cin, allTaxiDetails[I].taxiRank, '\n');.
  3. operator>> для вашего текста.
+0

работал для меня. Отличное объяснение. –

4

Я считаю, забыть #include < строка> этот критический заголовок является источником ошибок. Это случилось со мной как новичок C++.

Смежные вопросы