wurzel ziehen



  • Hallo,

    Bin ein totaler Anfänger, hier das erste problem:
    Ich will eigentlich nur eine variable "wurzel" erstellen und in der dann die wurzel von "64" speichern:

    #include "stdafx.h"
    #include "iostream"
    #include "cmath"
    using namespace std;
    
    int main()
    {
    double wurzel;
    wurzel = sqrt(64);
    
    	return 0;
    }
    

    Nur funktioniren tuts nicht:

    ------ Erstellen gestartet: Projekt: Base, Konfiguration: Debug Win32 ------
    Kompilieren...
    Base.cpp
    xxxbase.cpp(12) : error C2668: 'sqrt': Mehrdeutiger Aufruf einer überladenen Funktion
    cxxx\math.h(581): kann 'long double sqrt(long double)' sein
    xxx\math.h(533): oder "float sqrt(float)"
    cxxx\math.h(128): oder "double sqrt(double)"
    bei Anpassung der Argumentliste '(int)'
    Das Buildprotokoll wurde unter "file:/xxx\Debug\BuildLog.htm" gespeichert.
    Base - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen

    Woran liegt das?

    Danke schonmal,

    Felix1432 🙂



  • Probier mal das:

    sqrt(64.);
    

    Damit legst du fest, dass deine Konstante vom Typ double ist. Sonst weiß er nicht, ob er nach float oder double konvertieren soll...

    Überladung bedeutet ja, dass eine Funktion mehrfach mit unterschiedlicher Parameterliste definiert wird. Und von sqrt gibt es mehrere Varianten, aber keine, die einen int-Typ entgegen nimmt. Er muss also implizit konvertieren, und da kann er halt nicht entscheiden, in welchen Typ (denn möglich sind alle Varianten).



  • Super! 👍
    🙂



  • Des Weiteren bindent man die C++-Header eigentlich nicht mit Anführungszeichen ein. Eher so:

    <iostream>
    

    Die beiden Varianten haben aber auch noch einen Unterschied darin, wo nach dem Header gesucht wird. Bei Interesse kannste dir das ja mal in der Doku ansehen.

    Und "return 0" brauchst du am Ende der main nicht (kannst du aber machen, wenn dir das so gefällt).


Anmelden zum Antworten