Compiler Fehlermeldung



  • Hallo zusammen. Ich bin neu im Forum. Das ging schnell. Heute ist mein 5. Programmiertag und ich habe bei einem mathematischen Programm, eine Fehlermeldung gekriegt. Ich werde im folgenden den kurzen programmcode wiedergeben und meine zwei Probleme schildern. Hoffe das geht i.O. so und hoffe natürlich auf tatkräftige Hilfe. Also danke ich Euch jetzt schon im Voraus und bitte um Nachsicht für die evtl. Einfachheit meines Problems

    //Programm zur Berechnung von diskreten undkontinuierlichen Logarithmen
    #include <cmath>
    [cpp]#include <iostream>
    #include <iomanip>
    using namespace std;
    int main()
    {long n;
    cout << "Enter a positive Integer : ";
    cin >> n;
    int d=0;
    double p2d=1;
    for (int i=n; i > 1; i /= 2,d++)
    {p2d=pow(2,d);
    cout << setw (2) << p2d << " <= " << setw (2) << n/i << " < " << setw (2)<<2p2d << endl;
    }
    p2d=pow(2,d);
    cout << setw (2) << p2d << " <= " << setw (2) << n << " < " << setw (2)<<2
    p2d << endl;
    cout << "The discret Logarithm of : " << n << " is " << d << endl;
    double lgn=log(n)/log(2);
    cout << "The continous Logarithm of : " << n << " is " << lgn << endl;
    }

    //Mein Problem ist das der Compiler bei der Funktion pow(2,d) und deren Werte Zuweisung nach p2d folgende Fehlermeldung ausgiebt: " call of overload pow(long int&) is ambigous....

    //ich habe für die Ausgabe der exponentialwerte dann ein eigenes Programm geschrieben und dieses funktioniert auch wunderbar, bis auf die Variante, dass wenn ich als Exponent eine nicht ganze positive Zahl (z.B. o.5) eingebe, er dies nicht berechnen kann. Es ist mir auch klar dass dies an der Iterationsschleife liegt....ich hoffe vielleicht einen tipp zu kriegen, die mich in die richtge richtung stösst, damit ich auch float/double exponenten verwenden kann.

    //Programm zur Berechnung von Exponentialwerte
    #include <iostream>
    using namespace std;
    int main()
    {double x, p; //x=Basis und p=Exponent
    cin >> x >> p;
    double a=x;
    int b;
    for (i=1; i < p; i++)
    b = (a *= x)
    cout << b <<;
    }

    VIelen Dank an Euch.

    Dufte



  • Erstens: sfds 😉

    Zweitens: Das fehlt noch die Hälfte der Fehlermeldung - kannst du die mal bitte komplett hier vorstellen? (afaik existiert pow() für double-Werte und verschiedene complex<>- und valarray<>-Spezialisierungen, aber nicht für int's - da weiß der Compiler nicht genau, in welchen Typ er die int-Parameter umwandeln soll)



  • Danke für die schnelle Reaktion.

    1.) Werde das Coloring in Zukunft beachten.

    2.) Irgendwie schien mir die Fehlermeldung auch verdächtig, allerdings bricht die Meldung nach ambigous ab. Das mit dem int Wert habe ich mir auch gedacht und auch die ganzen Deklarationen mit double versucht. Ging trotzdem nicht. Aber die Syntax von pow() habe ich richtig angewand? Es schien mir ja schon so, dass ich ne falsche Deklaration gemacht habe. trotz änderung funzts ned.



  • Du mußt die Konstante explizit als double darstellen:

    pow(2.0, d);
    


  • hallo

    besten dank für die hilfe hat nun so gefunzt.

    p2d=pow((double 2.0), (doube d));
    

    cu
    dufte


Anmelden zum Antworten