Default Argumente in Klassen und Namespaces



  • Also ich habe zum Einen hier einen Auszug aus einer Klasse:
    KJLog.hpp

    ...
    class kjLog
    {
          public:
                void     SetString(string cSet_string_name,string cValue,kjReturn &Error=kjReturn());
                void     SetInt   (string cSet_int_name   ,int    iValue,kjReturn &Error=kjReturn());
                void     SetFloat (string cSet_float_name ,float  fValue,kjReturn &Error=kjReturn());
                void     SetBool  (string cSet_bool_name  ,bool   bValue,kjReturn &Error=kjReturn());
    };
    ...
    

    und zum Anderen habe ich hier einen Auszug aus einem Header, indem es nur Funktionen in einem namespace gibt.
    KJMath.hpp

    namespace kjMath
    {
        float AbsoluteValue (float fNumber,kjReturn &Error=kjReturn());                 //Betrag
        float Exponentiation(float fBasis,int iExponent,kjReturn &Error=kjReturn());    //Potenzieren
        float RootExtraction(float fRadicand,int iExponent,kjReturn &Error=kjReturn()); //Radizieren
    };
    

    Es geht mir hierbei um die Defaultwerte. In der Klasse bemängelt der Compiler bei den kjReturn-werten nichts, doch bei dem namespace, also wo die Funktionen für sich stehen, bemängelt er, dass der Defaultwert einen falschen Datentyp hat:
    Fehler

    23 E:\KJ_DatenXP\Programmierung\Projekte\Projekte DevC++\Konsole\KJClasses-Testumgebung\KJMath.hpp default argument for `kjReturn&Error' has type `kjReturn' 
    24 E:\KJ_DatenXP\Programmierung\Projekte\Projekte DevC++\Konsole\KJClasses-Testumgebung\KJMath.hpp default argument for `kjReturn&Error' has type `kjReturn' 
    25 E:\KJ_DatenXP\Programmierung\Projekte\Projekte DevC++\Konsole\KJClasses-Testumgebung\KJMath.hpp default argument for `kjReturn&Error' has type `kjReturn'
    

    So der Fehler ist ja verständlich nur ich frage mich, wieso ist das so und warum. Außerdem interessiert mich natürlich wie ich die Fehler umgehen kann.


  • Mod

    wie und wo ist denn kjReturn definiert? im übrigen ist das ganze in jedem falle falsch (sowohl in der klasse als auch in den namespace-funktionen), da rvalues nicht an referenzen auf nicht-const gebunden werden können). möglicherweise ist es hier ohnehin sinnvoller mit exceptions zu arbeiten.



  • Das es falsch ist, habe ich mittlerweile auch bemerkt, doch verwundert es mich, da es in der Klasse funktioniert???? Ich habe es bereits angewendet. KjReturn ist so definiert:

    enum kjReturn
    {
        SUCCESS=0,
        FAILURE=1,
        FAILURE_INIT_RECALL=2,
        FAILURE_EXIT_RECALL=3,
        FAILURE_GET=4,
        FAILURE_SET=5
    };
    

    Ist es vielleicht einfacherer ein static Objekt von kjReturn zu instanzieren und dieses als Default Argument zuzuweisen?



  • Eine Möglichkeit wäre auch, eine Methode ohne kjReturn-Parameter anzubieten, die die Methode mit kjReturn-Parameter dann mit einem Stackobjekt aufruft und dieses dann verwirft.



  • Das durch Überladung zu regeln, meinst du das damit?

    Aber mich interessiert wieso DevC++ 4.9.9.2 die Klasse ohne zu murren kompiliert, mit der falschen Zuweisung, aber das dann bei den StandAloneFunktionen als Fehler anprangert???


Anmelden zum Antworten