Überladen von Funktionen aus math.h in einer Klasse



  • Folgender code gibt erzeugt mir ein Problem das ich nicht lösen kann
    (math.h ist inkludiert)
    base und error sind public doubles in der klasse calc

    calc calc::log(const calc& x) 
    {
    	calc temp;
    	temp.error = 1/x.base*x.error;
    	temp.base = log(x.base);
    	return temp;
    }
    

    In member function 'calc calc::log(const calc&)':
    error: no matching function for call to 'calc::log(const double&)'
    temp.base = log(x.base);

    note candidate is:
    note: calc calc::log(const calc&)
    calc calc::log(const calc& x)

    note: no known conversion for argument 1 from 'const double' to 'const calc&'

    Ich habe keine ahnung warum der compiler mir hier nen fehler wirft
    alle ideen oder lösungsvorschläge sind sehr wilkommen 🙂
    Ich hoffe nur ich habe hier keinen blöden fehler gemacht 😞



  • Das Problem ist, das calc::log() vor std::log() aus <cmath> gefunden wird, wenn der Compiler versucht log() aufzulösen.
    Schreib std::log(x.base) .



  • Furble Wurble schrieb:

    Das Problem ist, das calc::log() vor std::log() aus <cmath> gefunden wird, wenn der Compiler versucht log() aufzulösen.
    Schreib std::log(x.base) .

    Wenn du math.h so eingebunden hast:

    #include <cmath>
    

    Bei

    #include <math.h>
    

    solltest du nur ::, nicht std:: voransetzen. Danach solltest du dich eines besseren besinnen, und cmath statt math.h einbinden.



  • Ahh, vielen Dank für die schnelle Hilfe :))



  • Hilft bei sowas nicht ADl, d.h. dass man das so schreibt:

    calc calc::log(const calc& x)
    {
        using std::log;
        // oder sogar using namespace std;
    
        calc temp;
        temp.error = 1/x.base*x.error;
        temp.base = log(x.base);
        return temp;
    }
    

    ?


Log in to reply