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.hppnamespace 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:
Fehler23 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.
-
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???