URL: https://www.overclockers.at/coding-stuff/kleines-c-problem-mit-ostream-operator_224799/page_2 - zur Vollversion wechseln!
Hier die 3 Files die ich verwendet habe (MacOSX 10.6.8. + XCode4). Ich hab jetzt die Funktionen der Klasse Kreis auf die Schnelle gleich im h. File implementiert, wär aber besser im .cpp aufgehoben.
Kreis.h:
Code: CPP#ifndef RECHNEN_H #define RECHNEN_H #define PI 3.14159256 #include <iostream> #include <math.h> class Kreis { public: Kreis(double radius) : r(radius) {}; double getRadius() const { return r; } double getDurchmesser() const { return r * 2.0; } double getFlaeche() const { return PI * pow(getRadius(), 2.0); } private: const double r; }; std::ostream& operator << (std::ostream &os, const Kreis& kreis); #endif // RECHNEN_H
Code: CPP#include "Kreis.h" #include <stdio.h> using namespace std; ostream& operator << (ostream &os, const Kreis& kreis) { os << "Radius: " << kreis.getRadius() << endl; os << "Durchmesser: " << kreis.getDurchmesser() << endl; os << "Flaeche: " << kreis.getFlaeche() << endl; return os; }
Code: CPP#include "Kreis.h" #include <stdio.h> using namespace std; int main (int argc, const char * argv[]) { Kreis kreis(5); cout << kreis; return 0; }
Die Fehlermeldung hat auch nichts mit der Rekursion zu tun. Du verwendest in rechnen.h den Typ "ostream" ohne dass du ihn vorher irgendwo definiert hast. Dir fehlt dort einZitat von Bunnydanke für den Tipp, funktioniert aber trotzdem nicht.. die Fehlermeldung ändert sich nicht.
bzw.Code: CPP#include <iostream> using namespace std;
und dannCode: CPP#include <iostream>
Code: CPP... std::ostream ...
Das "using namespace std" aber bitte rausnehmen aus dem .h File
Hey !
ja danke, so funktionierts bei mir auch! ... is ja schon mal was ... ich denk mir halt nur das eigentlich nicht die Lösung ist die ich haben wollte.
Aber vorerst ist mal das Problem gelöst.. ich werde mich zwar weiterhin damit beschäftigen, aber DANKE mal!
lg
Dann verstehe ich aber nicht, welche Lösung du haben wolltest? :-)
Meinst du den stream Operator?
warum der ostream operator nicht in der klasse bleiben kann versteh ich nicht...
Den kannst eh wieder als friend in die Klasse ziehen. Allerdings bringt es halt nicht viel, weil du sowieso nicht direkt auf die private Member zugreifst vom stream Operator aus.
Den friend brauchst ja nur dann, wenn du auf private Details der Klasse ohne Getter-Funktionen zugreifen willst.
Spikx hat die Fehler eh schön zusammengefasst oben (bis auf das "using namespace std" halt, das gehört mMn nicht in ein .h File) . Den Rest deiner Lösung kannst/sollst du eh selber schreiben :-)
na passt mal, ich sag danke an alle !!!!
lg
Würd ich eh auch net machenZitat von PuhBär(bis auf das "using namespace std" halt, das gehört mMn nicht in ein .h File)
Zitat von Bunnyalso ich komm nicht weiter... ich hab schon so viel herum gespielt...
Es seit übrigens noch gesagt dass:
using namespace std;
nicht unbedingt der sauberste Stil ist weil es in einigen Fällen (vorallem größeren Projekten) auch vorkommt, dass man mit eigenen oder weiteren Namensräumen arbeitet.
Daher entweder immer den namespace davor schreiben:
zb.: std:: cout << ....
oder so:
using std::cout;
using std::cin; ....
cout << ...
cin >> ...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025