Thomas: C++ unbekannter Fehler

Guten Morgen zusammen,
ich hab folgendes Problem, mir wird beim erstellen folgendes Problem immer wieder vorgehalten: error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'rational' akzeptiert (oder keine geeignete Konve c:\Dokumente und ...
Quelltext:
#include <stdafx.h>
#include <cstring>
#include <iostream>

using namespace std;

class rational {
private:
int zaehler;
int nenner;
public:
rational(); // Standardkonstruktor
rational( int z , int n);
void set_zahler (int z);
void set_nenner (int n);
int get_zaehler() const;
int get_nenner() const;

rational addiere(rational s2) const;
};

int main()
{

rational r, r2(3,4);

r.set_zahler(4);
r.set_nenner(6);

cout<<"Zaehler: "<<r.get_zaehler()<<endl;
cout<<"Nenner : "<<r.get_nenner()<<endl;
cout<<"Ergebnis: "<<r.addiere(r2)<<endl; //<<<- FEHLER WIRD HIER ANGEZEIGT

}

rational::rational()
{
nenner = 12;
zaehler = 3;
}

rational::rational (int z, int n)
{
zaehler = z;
nenner = n;
}

void rational::set_zahler(int z){
zaehler=z;
}

void rational::set_nenner(int n){
nenner=n;
}

int rational::get_zaehler() const
{
return zaehler;
}

int rational::get_nenner() const
{
return nenner;
}

rational rational::addiere(rational s2)const
{
rational erg;
erg.nenner = nenner * s2.nenner;
erg.zaehler = zaehler * s2.nenner + s2.zaehler * nenner;
return erg;

}

Hoffe ihr wisst nen Rat, danke im voraus!

  1. Hallo,

    ich hab folgendes Problem, mir wird beim erstellen folgendes Problem immer wieder vorgehalten: error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'rational' akzeptiert (oder keine geeignete Konve c:\Dokumente und ...

    addiere() der Klasse rational liefert einen Wert vom typ rational. Für diesen Typü gibt es keinen überladenen Operator <<, und genau das meldet der Compiler.
    Impementieren den <<-Operator für die Klasse und alles wird gut;-)

    Grüße
      Klaus

    1. Hallo,

      ich hab folgendes Problem, mir wird beim erstellen folgendes Problem immer wieder vorgehalten: error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'rational' akzeptiert (oder keine geeignete Konve c:\Dokumente und ...

      addiere() der Klasse rational liefert einen Wert vom typ rational. Für diesen Typü gibt es keinen überladenen Operator <<, und genau das meldet der Compiler.
      Impementieren den <<-Operator für die Klasse und alles wird gut;-)

      Grüße
        Klaus

      Danke für die Recht schnelle Antwort Klaus. Das Problem ist, dass wir dieses Kapitel "Impementieren" noch nicht behandelt haben. Wäre dir verbunden, wenn du mir ein bisschen auf die Sprünge helfen könntest.

      1. Hallo,

        ich hab folgendes Problem, mir wird beim erstellen folgendes Problem immer wieder vorgehalten: error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'rational' akzeptiert (oder keine geeignete Konve c:\Dokumente und ...

        addiere() der Klasse rational liefert einen Wert vom typ rational. Für diesen Typü gibt es keinen überladenen Operator <<, und genau das meldet der Compiler.
        Impementieren den <<-Operator für die Klasse und alles wird gut;-)

        Grüße
          Klaus

        Danke für die Recht schnelle Antwort Klaus. Das Problem ist, dass wir dieses Kapitel "Impementieren" noch nicht behandelt haben. Wäre dir verbunden, wenn du mir ein bisschen auf die Sprünge helfen könntest.

        Moin,

        du sollst die Operator-Funktion
        ostream& operator << (ostream&, const rational&)
        schreiben ((Deklarieren und Definieren) == Implementieren).
        Kommt mir allerdings ein bisschen heftig vor, wenn man nicht weiß, was "Implementieren" bedeutet. Wie wäre es, erst einmal addiere() aufzurufen und dann Zähler und Nenner von r zum Beispiel getrennt durch "/" auszugeben?

        --
        Auch Claus
        1. Also, ich habs nun so gelöst, falls es jmd interessieren sollte:
          #include <stdafx.h>
          #include <cstring>
          #include <iostream>

          using namespace std;

          class rational{
          private:
          int zaehler;
          int nenner;
          public:
          rational(); // Standardkonstruktor
          rational( int z , int n);
          int get_zaehler() const;
          int get_nenner() const;
          void set_zahler (int z);
          void set_nenner (int n);

          rational addiere(rational s2) const;
          };

          int main()
          {

          rational r, r2(1,2), ergeb;

          ergeb=r.addiere(r2);

          cout<<"Addition"<<endl;
          cout<<"Zaehler: "<<ergeb.get_zaehler()<<endl;
          cout<<"Nenner : "<<ergeb.get_nenner()<<endl;

          }

          rational::rational()
          {
           zaehler = 1;
           nenner = 3;
          }

          rational::rational (int z, int n)
          {
          zaehler = z;
          nenner = n;
          }

          void rational::set_zahler(int z){
          zaehler=z;
          }

          void rational::set_nenner(int n){
          nenner=n;
          }

          int rational::get_zaehler() const
          {
          return zaehler;
          }

          int rational::get_nenner() const
          {
          return nenner;
          }

          rational rational::addiere(rational s2)const
          {
          rational erg;
          erg.nenner = nenner * s2.nenner;
          erg.zaehler = (zaehler * s2.nenner) + (s2.zaehler * nenner);
          return erg;
          }