operator>> problem
-
ich möchte bestimmte datensätze aus einer txt datei einlesen und bekomme dabei folgende fehlermeldungen:
error C2601: 'operator >>' : local function definitions are illegal
this line contains a '{' which has not yet been matched
error C2601: 'operator <<' : local function definitions are illegal
this line contains a '{' which has not yet been matchedtxt file:
Name(string) gewicht(int) anzahl(int) Name(string) gewicht(int) anzahl(int) usw.
#include "Travel.h" struct Passenger { std::string name; unsigned int weight; unsigned int groupCode; unsigned int id; }; void Travel::getRequets(){ std::ifstream is( "inFile" ); Passenger p; inline std::istream& operator>>(std::istream& is, Passenger& p) { Passenger tmp; std::getline(is, tmp.name); is >> tmp.weight >> tmp.groupCode >> std::ws; if (is) p = tmp; return is; } inline std::ostream& operator<<(std::ostream& os, const Passenger& p) { return os << p.name << '\n' << p.weight << '\n' << p.groupCode << '\n' << '\n'; } if ( ! is.eof() ) std::cerr << "File/Format Error"; }
-
Die Fehlermeldung sagt eigentlich recht genau was falsch ist..
-
ich bin noch c++ anfänger und ich weiß nicht wie das problem lösen kann
es heisst also das die operator definition local nicht zulässig ist und das das zeichen "{" hier einfach nicht stehen sollte, nicht passt
aber wie muss es denn dann gemacht werden?
-
Du kannst keine Funktionen innerhalb anderer Funktionen definieren. Überlade die Stream-Operatoren ausserhalb von
Travel::getRequets()
(müsste das nichtgetRequests()
heissen?).
-
Funktionsdefinitionen gehören nicht innerhalb einer Funktion. Zieh das einfach aus der main Funktion raus.
#include "Travel.h" struct Passenger { std::string name; unsigned int weight; unsigned int groupCode; unsigned int id; }; inline std::istream& operator>>(std::istream& is, Passenger& p) { Passenger tmp; std::getline(is, tmp.name); is >> tmp.weight >> tmp.groupCode >> std::ws; if (is) p = tmp; return is; } inline std::ostream& operator<<(std::ostream& os, const Passenger& p) { return os << p.name << '\n' << p.weight << '\n' << p.groupCode << '\n' << '\n'; } void Travel::getRequets(){ std::ifstream is( "inFile" ); Passenger p; if ( ! is.eof() ) std::cerr << "File/Format Error"; }