kleines c++ problem mit ostream << operator
Bunny 24.06.2011 - 20:50 5981 25
PuhBär
Schau ned so genau
|
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: #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
Kreis.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;
}
main.cpp: #include "Kreis.h"
#include <stdio.h>
using namespace std;
int main (int argc, const char * argv[])
{
Kreis kreis(5);
cout << kreis;
return 0;
}
|
Spikx
My Little Pwny
|
danke für den Tipp, funktioniert aber trotzdem nicht.. die Fehlermeldung ändert sich nicht. 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 ein #include <iostream>
using namespace std;
bzw. #include <iostream>
und dann ... std::ostream ...
|
PuhBär
Schau ned so genau
|
Das "using namespace std" aber bitte rausnehmen aus dem .h File
|
Bunny
Addicted
|
Hey ! ja danke, so funktionierts bei mir auch! ... is ja schon mal was ![:D](/images/smilies/biggrin.gif) ... 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
|
PuhBär
Schau ned so genau
|
Dann verstehe ich aber nicht, welche Lösung du haben wolltest? :-)
Meinst du den stream Operator?
|
Bunny
Addicted
|
warum der ostream operator nicht in der klasse bleiben kann versteh ich nicht...
|
PuhBär
Schau ned so genau
|
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 :-)
Bearbeitet von PuhBär am 27.06.2011, 21:41
|
Bunny
Addicted
|
na passt mal, ich sag danke an alle !!!!
lg
|
Spikx
My Little Pwny
|
(bis auf das "using namespace std" halt, das gehört mMn nicht in ein .h File) Würd ich eh auch net machen
|
that
Hoffnungsloser Optimist
|
also ich komm nicht weiter... ich hab schon so viel herum gespielt... Du hast dir offenbar nicht einmal die Mühe gemacht, alle Antworten auf deine Frage in diesem Thread zu lesen. Solltest du eine Antwort trotz Recherche im Internet und etwas Nachdenken nicht verstehen, dann frage nach, aber ignoriere sie nicht einfach. Aber poste nie wieder etwas in der Art "ich hab ewig herumprobiert und es geht noch immer nicht" ohne genaue Angabe, was du probiert hast, und auf welche Art und Weise es genau nicht geht.
Es ist kein Einzelfall, dass du Antworten in deinen Threads ignorierst (z.B. zur Erinnerung). Sollte das nochmal vorkommen, rechne mit entsprechenden Konsequenzen.
|
Paxi
Overclocking Team Member
|
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 >> ...
|