Leere map übergeben



  • Hallo,

    wie kann ich ggf. eine leere map korrekt an eine Funktion übergeben?

    Die Funktion sieht so aus:

    void calculate(float x, float x2, map<string,float>& data=(map<string,float>()));
    

    und der Aufruf dazu so:

    calculate(45, 12, map<string,float>())
    

    Funktioniert alles wunderbar mit dem Microsoft Compiler, aber leider nicht mit dem g++. Wie muss die Funktion bzw. der Aufruf aussenden, wenn keine map übergeben werden soll?

    calculate(45, 12, NULL);
    

    funktioniert auch nicht!



  • Falsches Forum: C++ wäre korrekt.



  • Das

    void calculate(float x, float x2, map<string,float>& data=(map<string,float>()));
    

    muss so

    void calculate(float x, float x2, map<string,float>& data);
    

    aussehen.

    Das

    calculate(45, 12, map<string,float>())
    

    geht nicht, weil Du ein temporäres Objekt nicht an eine non-const Referenz binden kannst.

    Das

    calculate(45, 12, NULL);
    

    geht nicht, weil NULL nicht in den Zieltyp konvertierbar ist und natürlich auch ein temporäres Objekt erzuegen würde.

    Edit:
    Und so gehts:

    map<string,float> m; // leere map
    calculate(45, 12, m);
    


  • So hatte ich es jetzt auch gelöst.

    map<string,float> m; // leere map
    calculate(45, 12, m);
    

    obwohl ich keine Erklärung dafür hatte. Deshalb war es auch etwas verwunderlich für mich, weshalb es mit dem Microsoft Compiler in der ungewöhnlichen Variante mit map<string,float>() funktioniert...

    Vielen Dank für die Erklärung.

    P.S.
    Vielleicht könnte ein Moderator das Thema ins richtige Forum schieben, Danke!



  • Deshalb war es auch etwas verwunderlich für mich, weshalb es mit dem Microsoft Compiler in der ungewöhnlichen Variante mit map<string,float>() funktioniert...

    Stell den Warning Level auf 4, dann sagt Dir der Compiler, dass das nicht Standardkonform ist!



  • Ah sehr gut, vielen Dank für den Tipp. Ich finde es besser wenn gleich Standardkonformer Code erzeugt wird.



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Sharpie schrieb:

    Ah sehr gut, vielen Dank für den Tipp. Ich finde es besser wenn gleich Standardkonformer Code erzeugt wird.

    Ich finde es auch besser, wenn du gleich standardkonformen Code erzeugst. Der Compiler erzeugt sowieso standardkonformen Assemblercode (falls man da von Standard reden kann).


Anmelden zum Antworten