...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 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 &) 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 &)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.