Mit Punkten arbeiten
-
Danke für die Hilfe, werde das Buch dann mal zurückblättern. Habe auch die Point.h definiert. Doch jetzt ist es so das man keine Werte einlesen kann. Es wird 7-mal das was in cout ist angezeigt.
-
Das mit dem Zurückblättern wird dir auf jeden Fall helfen

So jetzt hab den Beitrag oben geändert, hatte die Eingabe aus irgendeinem Grund vergessen:D( warscheinlich zu stark von Mathe abgelenkt )Lg freeG
-
So jetzt geht alles, danke für deine Hilfe. Denke auch zurückblättern hilft immer weil man auch sehr viel Sachen vergisst. Doch wie der Autor gesagt hat Programmieren lernt man in dem man Code schreibt und nicht wenn man ein Buch liest.
-
Edit: hatte nicht registriert das der Thread inzwischen deutlich weiter fortgeschritten ist...
winux schrieb:
Und das habe ich bis jetzt gemacht
Es deutet vieles darauf hin, das du das Buch nochmal von Anfang an intensiv lesen solltest.
1. Deklariere den Datentyp nicht lokal (Es sei den du weist wirklich was du da tust).
2. Der Vector gehört nicht in die Punktklasse hinein, was ganz davon abgesehen, so auch nicht so funktionieren kann.
3. Für die Verwendung des Vectors sollte die Klasse einen Standardkonstruktor (Sprich einen ohne Argumente, oder mit Defaultargumenten) haben.
4. Selbst wenn 2 funktionieren würde, könntest du nicht auf Nicht-Statische Membervariablen ohne eine Instanz zugreifen (Ist dir der Unterschied zwischen Klasse und Objekt [im OO-Sinne] bzw. Instanz klar?).
-
winux schrieb:
So jetzt geht alles, danke für deine Hilfe. Denke auch zurückblättern hilft immer weil man auch sehr viel Sachen vergisst. Doch wie der Autor gesagt hat Programmieren lernt man in dem man Code schreibt und nicht wenn man ein Buch liest.
Es stimmt zwar, das man nicht alleine vom Bücher lesen lernt, aber in deinen Fall scheint mir eher zu sein das du das Buch im allerbesten Fall überflogen hast (Und wenn das Kapitel 10 auf die anderen Kapitel übertragbar ist, werden in jedem davon Übungen gemacht).
-
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.