Mit Punkten arbeiten
-
Jetzt will ich die Werte im Vektor ausgeben lassen, doch der Compiler sagt error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'Point' akzeptiert (oder keine geeignete Konvertierung möglich). Doch wie ich es weiß muss man doch so die werte ausgeben lassen.
void f() { vector<Point> original_points; for( int i = 0; i < 7; ++i ) { cout << "Bitte geben sie einen x- und einen y-Wert ein: "; int x, y; cin >> x >> y; if (x >= 10000 || x <= 0 || y <= 0 || y >= 10000) {cout << "ungueltiger wert" << endl; break;} original_points.push_back( Point(x,y) ); } for ( int i = 0; i < original_points.size(); ++i) cout << original_points[i] << "\n"; } int main() { f(); keep_window_open(); return 0; }
-
winux schrieb:
...Doch wie ich es weiß...
Du rätst dich hier doch nur durch. Ob man dir aktuell helfen sollte wage ich eigentlich zu bezweifeln (da dies nur mehr fragen nach sich zieht, die beim "echten" Lesens des Buches mit Sicherheit nicht auftreten würden.
Nur ein Tip: Der operator<< unterstützt direkt weder den Vector- noch deine Point-Klasse. Du kannst aber durchaus die Einzelwerte jedes Elementes einzeln ausgeben...
-
das geht auch, du musst nur die entsprechende Methode implementieren die den operator <<(...) entsprechend überläd so dass sie deine Point-typen frisst und die Koordinaten ausspuckt
-
Jetzt verstehe was ihr meint. Da der Vektor ein benutzerdefinierte Typ ist hat cout Probleme die Werte auszugeben, die Lösung wäre ein benutzerdefinierter Ausgabeoperator.
-
winux schrieb:
Jetzt verstehe was ihr meint. Da der Vektor ein benutzerdefinierte Typ ist hat cout Probleme die Werte auszugeben, die Lösung wäre ein benutzerdefinierter Ausgabeoperator.
Deine Lösung is richtig, dein Verständnis leider nicht;-)
Nicht cout hat irgendein Problem damit, sondern der Compiler, da der <<-Operator so nicht auf deine Klasse angwendet werden kann, weil das ganze weder deklariert noch definiert ist. Musst also wie meine Vorredner schon gesagt haben und du richtig erkannst hast, den <<-Operator für deine Klasse überladen.Lg freeG
-
Jetzt brauch ich eure Hilfe, was mache ich hier falsch?
void f() { ostream& operator<<(ostream os, const vector <Point>& original_points) { for ( int i = 0; i < original_points.size(); ++i) return os << original_points[i] << "\n"; } vector<Point> original_points; for( int i = 0; i < 7; ++i ) { cout << "Bitte geben sie einen x- und einen y-Wert ein: "; int x, y; cin >> x >> y; if (x >= 10000 || x <= 0 || y <= 0 || y >= 10000) {cout << "ungueltiger wert" << endl; break;} original_points.push_back( Point(x,y) ); } cout << original_points; }
-
Du hast einfach noch nicht verstanden was ein Klasse ist, das ist der einzige fehler

-
Eins verstehe ich nicht im Buch stecht so was:
for (int i = 0; i< points.size(); ++i) ostr << '(' << points[i].x << ',' << points[i].y << ")\n";Langsam verstehe ich was ihr meint, es hat kein Zugang zur klasse.
-
FRAGS ===== Jürgen Wolf: 3583 Bjarne Stroustrup: 1 Stanley Lippman: 0 Ulrich Breymann: 0
-
So habe eine neues Projekt gemacht, und einen einfacheren Code genommen.
#include "std_lib_facilities.h" #include <fstream> using std::ofstream; using std::endl; struct Point { int x, y; Point(int xx, int yy):x(xx),y(yy) {} }; int main() { ofstream fout( "mydata.txt" ); cout << "Geben Sie bitte den Namen der Ausgabedatei ein:"; string name; cin>>name; ofstream ostr(name.c_str()); if(!ostr) error("Fehler beim Oeffnen der Ausgabedatei",name); vector <Point> original_points; for( int i = 0; i < 7; ++i ) { cout << "Bitte geben sie einen x- und einen y-Wert ein: "; int x,y; cin>>x>>y; if (x >= 10000 || x <= 0 || y <= 0 || y >= 10000) {cout << "ungueltiger wert" << endl; break;} original_points.push_back( Point(x,y) ); } for (int i = 0; i < original_points.size(); ++i) fout << original_points[i].x << ',' << original_points[i].y << endl; cout << "Geben Sie bitte den Namen der Eingabedatei ein:"; cin>>name; ifstream istr(name.c_str()); if(!istr) error("Fehler beim Oeffnen der Eingabedatei",name); keep_window_open(); return 0; }
-
Warum öffnest du 3 Dateien und verwendest nur eine?
-
Die Übung sagt zuerst in die Datei reinschreiben dann wieder öffnen und die Werte in einen Vektor speichern. Bei Google fand ich den ofstream fout. Wie es aussieht hat der Code paar Fehler, aber das ist mein erstes Programm das in eine Datei schreiben und lesen soll. Anfänger Fehler.
-
Jetzt habe ich folgendes Problem wenn die Datei eingelesen wird, wird nur eine Zeile angezeigt obwohl es sieben sind.
struct Point { int x, y; Point(int xx, int yy):x(xx),y(yy) {} }; int main() { ofstream fout( "mydata.txt" ); cout << "Geben Sie bitte den Namen der Ausgabedatei ein:"; string name; cin>>name; ofstream ostr(name.c_str()); if(!ostr) error("Fehler beim Oeffnen der Ausgabedatei",name); vector <Point> original_points; for( int i = 0; i < 7; ++i ) { cout << "Bitte geben sie einen x- und einen y-Wert ein: "; int x,y; cin>>x>>y; if (x >= 10000 || x <= 0 || y <= 0 || y >= 10000) {cout << "ungueltiger wert" << endl; break;} original_points.push_back( Point(x,y) ); } for (int i = 0; i < original_points.size(); ++i){ fout << original_points[i].x << ',' << original_points[i].y << endl; cout << original_points[i].x << ',' << original_points[i].y << endl;} cout << "Geben Sie bitte den Namen der Eingabedatei ein:"; cin>>name; ifstream istr(name.c_str()); if(!istr) error("Fehler beim Oeffnen der Eingabedatei",name); string buffer; getline(istr,buffer); cout << buffer << endl; istr.close(); keep_window_open(); return 0; }
-
Du hast ja auch nur ein getline (Schleife!?). Ich verstehe aber nicht warum du eine magische 7 verwendest, wenn doch vector beliebig viele Werte verwenden kann.
Edit: Du kannst deine Werte leichter mit dem ifstream einlesen als mit Getline.
-
Laut der Übung sollen es nur sieben Werte sein. Also dann ifstream verwenden.
-
Wenn ich das schreibe sagt der Compiler es fehlt ein Semikolon auch wenn es gesetzt wird.
cout << "Geben Sie bitte den Namen der Eingabedatei ein:"; cin>>name; ifstream istr(name.c_str()); if(!istr) error("Fehler beim Oeffnen der Eingabedatei",name); while (istr.good()) { cout << name << endl; } ifstream.close();
-
ifstream.close();sieht nicht richtig aus! ->
istr.close();
-
Habe es korrigiert doch jetzt habe ich eine Endlosschleife was nur mydata.txt ausgibt.
-
winux schrieb:
Habe es korrigiert doch jetzt habe ich eine Endlosschleife was nur mydata.txt ausgibt.
Weil du in der Schleife nichts einließst, somit ist der ifstream immer good.
Edit: Ändere beim Schreiben in die Datei das ',' in ' ' und es sollte mit dem folgenden Code funktionieren.
//Einlesen ifstream istr(name); if(!istr) cerr << "Fehler beim Oeffnen der Eingabedatei: " << name; vector<Point> lese_Punkte; while (!istr.eof()) { int x, y; if(istr >> x >> y) lese_Punkte.push_back(Point(x, y)); }
-
Das habe ich geschrieben, doch es zeigt nichts aus.
cout << "Geben Sie bitte den Namen der Eingabedatei ein:"; cin>>name; ifstream istr(name.c_str()); if(!istr) error("Fehler beim Oeffnen der Eingabedatei",name); vector <Point> read_points; while (!istr.eof()) { int x, y; if(istr >> x >> y) read_points.push_back( Point(x,y) ); }