c++ - Falta el argumento predeterminado-error del compilador
g++ default-arguments (5)
void func ( string word = "hello", int b ) {
// some jobs
}
in another function
//calling
func ( "", 10 ) ;
Cuando lo he compilado, el compilador emite un error;
default argument missing for parameter
¿Cómo puedo solucionarlo sin cambiar nada, por supuesto, como no hacer "int b = 0"? Además, quiero usar esa función como func (10) o func ("hola"). ¿Mi compilador no hace su trabajo correctamente?
¡No puedes arreglarlo sin cambiar nada!
Para solucionarlo, puedes usar la sobrecarga:
void func ( string word, int b ) {
// some jobs
}
void func ( string word ) {
func( word, 999 );
}
void func ( int b ) {
func( "hello", b );
}
El mensaje de error es correcto. Si el argumento predeterminado se asigna a un parámetro dado, todos los parámetros subsiguientes deberían tener un argumento predeterminado. Puedes arreglarlo de 2 maneras;
(1) cambie el orden del argumento:
void func (int b, string word = "hello");
(2) Asigne un valor predeterminado a b
:
void func (string word = "hello", int b = 0);
Los argumentos con un valor predeterminado deben venir al final de la lista de argumentos.
Así que simplemente cambie su declaración de función a
void func(int b, string word = "hello")
Los parámetros con valores predeterminados deben aparecer al final de la lista porque, al llamar a la función, puede dejar los argumentos al final, pero no puede perderlos en el medio.
Como tus argumentos tienen diferentes tipos, puedes obtener el mismo efecto usando una sobrecarga:
void func ( string word, int b ) {
// some jobs
}
void func ( int b ) { func("hello", b); }
No puede tener parámetros no predeterminados después de que comiencen sus parámetros predeterminados. Dicho de otra manera, ¿cómo se especificaría un valor para b
dejando la word
al valor predeterminado de "hola"?