J'ai travaillé sur un projet C++ en mode console Visual Studio 2012 et je continue à obtenir cette étrange erreur persistante avec la fonction cin
.
Sous le >>
Je reçois une ligne rouge et le programme me dit no operator matches these operands
. J'ai initialisé tous les éléments du tableau dans une méthode distincte.
Voici un exemple d'extrait (le code réel contient beaucoup plus de variables):
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
est un tableau de type de données "taxiDetails
" qui est cette structure:
struct taxiDetails {
string taxiDriverSurname;
int taxiID;
int taxiCoordinates;
int numberOfSeats;
bool taxiContainsCustomerYesNo;
bool WheelChairAccessibleVehicle;
string taxiRank;
fareDetails fareDetailsForTaxi;
bool taxiAvaliable;
};
Le problème est que string
n'a pas la méthode operator>>
, Mais elle a ...
#include <string>
En haut de ce fichier?getline(std::cin, allTaxiDetails[I].taxiRank, '\n');
.operator>>
Pour votre structure.Il semble que vous essayez de lire un objet de type std::string
pour lequel vous avez en quelque sorte obtenu la définition de classe (par exemple en incluant <iostream>
) mais vous n'avez pas obtenu toutes les opérations nécessaires! Assurez-vous d'inclure <string>
:
#include <string>
// ...
Il est assez courant que certains en-têtes fournissent des définitions de certaines autres classes, mais en fait, n'utilisent pas l'intégralité de l'en-tête pour obtenir les définitions. Puisque std::string
est nécessaire à certains endroits pour déclarer IOStreams, il est assez probable qu'il sera défini, mais probablement pas en incluant son en-tête complet.
Je crois oublier # include <string> cet en-tête critique est la source d'erreur. Cela m'est arrivé en tant que débutant en C++.