...no matching function for call



  • Hallo ! Habe folgendes Problem ueber dem ich bereits mehrere Stunden bruete:
    Ich erhalte beim Kompilieren immer die Fehlermeldung:

    main.cpp: In function int main()': main.cpp:6: no matching function for call tointervall::intervall ()'
    intervall.h:23: candidates are: intervall::intervall(const double &, const double &)
    intervall.h:27: intervall::intervall(const intervall &)
    main.cpp:6: no matching function for call to intervall::intervall ()' intervall.h:23: candidates are: intervall::intervall(const double &, const double &) intervall.h:27: intervall::intervall(const intervall &) main.cpp:6: no matching function for call tointervall::intervall ()'
    intervall.h:23: candidates are: intervall::intervall(const double &, const double &)
    intervall.h:27: intervall::intervall(const intervall &)

    VIELEN DANK IM VORAUS !

    In welchen Zeilen das Problem liegt ist offensichtlich, finde den Fehler aber trotzdem nicht. Poste aufgrund dessen den gesamten Quellcode.

    Die Funktion intervall.h

    #ifndef intervall_h
    #define intervall_h
    
    #include <fstream>
    
    class intervall {
    
      friend ostream &operator<<(ostream &ausgabe, intervall &I);
      friend istream &operator>>(istream &einlesen, intervall &I);
    
      private:
              double a,b;
    
      public:
              intervall(const double&, const double&);
              //double durchschnitt(intervall &I);
    
    };
    
    #endif
    

    Die Funktion intervall.cpp

    #include "intervall.h"
    
    intervall::intervall(const double& a, const double& a):a(a), b(b){}
    
    double intervall::durchschnitt(intervall &I){
    
    intervall c;
      c.a=0;
      c.b=0;
      // existiert ueberhaupt ein durchschnitt?
      if(I.b>a && b>I.a){
        // groesseres a verwenden
        if (I.a<a){ c.a=a; }
        else c.a=I.a;
    
        // kleineres b verwenden
        if (I.b<b){ c.b=I.b; }
        else c.b=b;
    
        if(c.a==c.b){ c.a=c.b=0; }
      }
     return c;
    
    }
    
    istream &operator>>(istream &einlesen, intervall &I){
    
      einlesen>>I.a>>I.b;
    
    return einlesen;
    }
    
    ostream &operator<<(ostream &ausgabe, intervall &I){
    
      ausgabe<<"("<<I.a<<","<<I.b<<")"<<endl;
    }
    

    Die main - Funktion:

    #include "intervall.h"
    
    int main(){
    
      intervall I1, I2, I3;
      cout<<"Bitte geben Sie zwei Intervalle ein:"<<endl;
      cin>>I1>>I2;
    
      //I3=I1.durchschnitt(I2);
      cout<<"Intervall 1 :"<<I1<<endl;
      cout<<"Intervall 2 :"<<I2<<endl;
      //cout<<"Durchschnitt :"<<I1.durchschnitt(I2)<<endl;
    
      return 0;
    }
    


  • was sagt dir denn der compiler?

    er sagt dir, dass du interval::interval() aufrufen willst, es aber nur ein interval::interval(const double&, const double&) gibt.

    was ist daran unklar?

    Tip:
    interval::interval ist der Konstruktor



  • die Klasse hat keinen Standardkonstruktor, du instanziierst die Klasse aber, als ob sie einen hat. Ändere eins der beiden.


Anmelden zum Antworten