2010-03-30 15 views
60

estoy recibiendo este mensaje de error con el código de abajo:error: argumento predeterminado dado por el parámetro 1

class Money { 
public: 
    Money(float amount, int moneyType); 
    string asString(bool shortVersion=true); 
private: 
    float amount; 
    int moneyType; 
}; 

principio pensé que los parámetros por defecto no están permitidos como primer parámetro en C++ pero se permite.

+0

¿Podría darnos un poco más de detalles? –

+0

¿qué compilador estás usando? –

+0

Estoy usando Eclipse CDT con MinGW 5.1.6 en Windows. – pocoa

Respuesta

134

Probablemente esté redefiniendo el parámetro predeterminado en la implementación de la función. Solo se debe definir en la declaración de la función.

//bad (this won't compile) 
string Money::asString(bool shortVersion=true){ 
} 

//good (The default parameter is commented out, but you can remove it totally) 
string Money::asString(bool shortVersion /*=true*/){ 
} 

//also fine, but maybe less clear as the commented out default parameter is removed 
string Money::asString(bool shortVersion){ 
} 
+0

Ahora dice: cadena Money :: asString() 'no concuerda con ninguno en la clase' Money ' – pocoa

+1

@pocoa Aún necesita mantener el parámetro 'bool shortVersion', simplemente elimine o comente el' = true' – Yacoby

+0

@Yacoby: Gracias, tenías razón. No tiene ningún sentido, es muy confuso. – pocoa

Cuestiones relacionadas