sqrt() Methode?



  • Hallo,

    ich möchte eine Funktion sqrt() schreiben, die die Wurzel einer komplexen Zahl ausrechnet. In dieser Funktion muss ich eine
    Methode sqrt() von 'math.h' aufrufen. Ein Fehler meldet sich da die beiden gleichnamig sind. Geht es überhaupt?

    mfg
    campus



  • Versuch mal dir math.h-sqrt mit dem scope-Operator davor aufzurufen. Das sollte eigentlich funktionieren

    const komplex& komplex::sqrt()
    {
        Im = ::sqrt(Im);
        ...
    }
    


  • schon mal was von namespace gehört? Du mußt dir deine Fkt sqrt() in einem eigenen namespace definieren; Bsp:

    #include....
    using namespace std:
    //...
    namespace myFunctions{
        void foo(){cout<<"Funktion  myFunctions::foo()"}
    }
    int main(){
        myFunctions::foo();
        //...
    

    um immer auf Nummer sicher zu gehen, kannst du alle Funktionen immer mit Angabe des Namespace
    (zB namespace::funktion(...) )



  • @freshman:
    Du hast gar keine Ahnung, worum es geht, oder? Beim aufruf kann es nicht zu Problemen kommen, da der Typ, derübergeben wird eein ganz anderer ist, als der, den die sqrt-Funktionen aus <cmath> erwarten.
    Es geht um einen rekursiven Aufruf. Was soll da dein Namespace?

    namespace myFunctions {
       T sqrt(T x)
       {
          ... = sqrt(...) // Autsch! aber hierum geht's
       }
    }
    

    @Deadlef:
    Was, wenn, wie heute üblich, <cmath> verwendet wird? ich würde eher auf ein std::sqrt setzen.



  • @Helium: Ich habe mich einfach den Gegebenheiten angepasst, was anderen in diesem Forum nicht möglich zu sein scheint 😃
    Nein, im Ernst: campus schrieb, er ruft die Funktion sqrt() aus 'math.h'. Dafür habe ich ihm die Erläuterung gegeben, nicht mehr und nicht weniger



  • Ups, ja, ok, zieh die Kritik an dir wieder zurück.



  • Nur mal so, die cmath hat sowohl complex als auch sqrt mit complex überladen...



  • sorry, i'm late, but...
    @helium: ja, meine Antwort war vielleicht echt ein bißchen überhastet, aber irgendwie kann ich dir nicht so ganz folgen 😕 wo findet denn in deinem CodeBsp Rekursion statt (es wird doch lediglich die sqrt() aus math.h oä aufgerufen und nicht die aufrufende Fkt von sich selber noch einmal)??
    Und wenn, so wie Mis2com sagt, cmath sowohl complex als auch sqrt mit complex überladen hat, dann wäre mein Vorschlag doch eine Lösung, oder?
    @all: irgendwie verstehe ich nix mehr 😞



  • freshman schrieb:

    wo findet denn in deinem CodeBsp Rekursion statt (es wird doch lediglich die sqrt() aus math.h oä aufgerufen und nicht die aufrufende Fkt von sich selber noch einmal)??

    Warum sollte sqrt aus math.h aufgerufen werden?

    myFunctions::sqrt ist doch viel lokaler (näher) als ::sqrt aus math.h
    Der Compiler nimmt immer das Symbol welches am nähesten ist (ganz laienhaft ausgedrückt). Deshalb kannst du auch

    int a;
    void foo()
    {
      int a;
      a=3;
    }
    

    schreiben und das globale a wird nicht angetastet.



  • wenn ich eine Funktion schreibe zur Berechnung der Quadratwurzel einer komplexen Zahl, dann habe ich doch nie die Absicht in dieser Funktion einen rekursiven Aufruf der selbigen zu machen. Ich rufe höchstens die Fkt sqrt() aus math.h auf (eben mit namespace und scope Operator), um die Wurzel des Betrages r zu berechnen. Deshalb wäre doch das Problem mit namespace:: .... wirklich gelöst, oder ??(siehe Ursprungsfrage:

    campus schrieb:

    Ein Fehler meldet sich da die beiden gleichnamig sind. Geht es überhaupt?

    post scriptum: ich glaube ich habe gerade einen Hänger 😕 😞


Anmelden zum Antworten