URL: https://www.overclockers.at/coding-stuff/kleines-c-problem-mit-ostream-operator_224799/page_1 - zur Vollversion wechseln!
Halloo,
ich spiele mich derzeit mit c++ und Qt. Hab c++ in der Schule und wollte jetzt einfach mal zur Wiederholung einfach ein Beispiel machen das nicht wirklich Sinn machen muss.
Hauptsache dabei ist das ich eine Klasse verwende. Jetzt hab ich gerade ein Problem mit dem Schiebeoperator " << " .... genauer gesagt mit dieser Zeile:
Code: CPPfriend ostream& operator <<(ostream &os,const Kreis); // << Operator funktioniert nicht!!!
Code: CPP#ifndef RECHNEN_H #define RECHNEN_H #define PI 3.14159256 class Kreis { public: Kreis(); Kreis(double radius); int getRadius(); int getDurchmesser(); void getFlaeche(); // Flaechenberechnung friend ostream& operator <<(ostream &os,const Kreis); // << Operator funktioniert nicht!!! private: double r; double d; }; #endif // RECHNEN_H
Code: CPPostream& operator <<(ostream &os,const Kreis) { os << Kreis; return os; }
Boah lange her. Ich glaube du Referenzierst "operator" falsch.
Probier "friend ostream &operator"..
nein, das ist ganz egal... das ist es nicht...
Fangen wir beim Einfachen an:
Wo ist dein "#include <ostream>"?
Und wo ist "using namespace std"?
Zu deiner zweiten Fehlermeldung fehlt der Sourcecode - wenn du dazu Hilfe erwartest, dann poste den ganzen Code, der nicht funktioniert - idealerweise so reduziert wie möglich.
ostream& operator <<(ostream &os,const Kreis)
-> const Kreis? müsste das nicht "const Kreis kreis" oder so sein? typ und dann der name der var?
Zitat von Eshostream& operator <<(ostream &os,const Kreis)
-> const Kreis? müsste das nicht "const Kreis kreis" oder so sein? typ und dann der name der var?
1. Wenn du << als friend Deklarierst, musst du es imho auch als friend definieren => compilest du mit -Wall?
2. Der 2. Parameter von << muss imho ein Pointer sein, also "const Kreis&"
3. Wie that schon geschrieben hat, hast du eine Endlosrekursion
hier ist meine main.pp :
Code: CPP#include <QtCore/QCoreApplication> #include <iostream> #include <math.h> #include <rechnen.h> using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Kreis test(5); cout << test; return a.exec(); }
Wenn du Kreis:Zitat von BunnyEDIT: wie darf ich das verstehn mit der endlosrekursion ?
Zitat von Bunnyhier ist meine main.pp :Code: CPP#include <QtCore/QCoreApplication> #include <iostream> #include <math.h> #include <rechnen.h> using namespace std;
@that: das sollte egal sein, wo das namespace steht bzw. machts sogar sinn, es nachher zu schreiben, da man es in den headern nicht verwenden soll, sondern std::bla
edit: la di da... sorry
also ich komm nicht weiter... ich hab schon so viel herum gespielt... und verstehen tuh ich es immer noch nicht was mit der endlosrekursion sein soll...
ich erkenns anscheinend nicht ... ^^ kann mir jemand ein beispiel/pseudo code posten ?
Du rufst im Streamoperator wieder den Streamoperator auf. Stattdessen gib dort einfach die Daten die du streamen willst aus.
Der 2. Parameter sollte glaub ich eine const-Referenz sein.
Code: CPPostream& operator << (ostream& os, const Kreis& kreis) { os << "Radius: " << kreis.getRadius(); return os; }
danke für den Tipp, funktioniert aber trotzdem nicht.. die Fehlermeldung ändert sich nicht.
Machmal das:
1. Inkludiere im .h-File <iostream>
2. Mach die Funktionen getRadius() und getDurchmesser() const
3. Zieh den stream Operator aus der Klasse heraus (friend kannst dann entfernen) und prefixe ostream mit std::
Bei mir kompiliert das.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025