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 arreglarlo 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 puede tener parámetros no predeterminados después comienzan sus parámetros predeterminados. Dicho de otra manera, ¿cómo especificaría un valor para b
partida word
al valor predeterminado de “hola”?
Los argumentos con un valor predeterminado deben aparecer al final de la lista de argumentos.
Así que simplemente cambia la declaración de tu función a
void func(int b, string word = "hello")
Los parámetros con valores predeterminados deben estar 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.
Dado que sus argumentos tienen diferentes tipos, puede obtener el mismo efecto utilizando una sobrecarga:
void func ( string word, int b ) {
// some jobs
}
void func ( int b ) { func("hello", b); }
-
+1 por sugerir la sobrecarga, logra exactamente la sintaxis de llamada que harían los argumentos intermedios predeterminados.
– Matthieu M.
21 de abril de 2011 a las 8:23
El mensaje de error es correcto. Si el argumento predeterminado se asigna a un parámetro dado, todos los parámetros posteriores deben tener un argumento predeterminado. Puedes arreglarlo de 2 maneras;
(1) cambiar 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);
¡No puedes arreglarlo sin cambiar nada!
Para solucionarlo, puede utilizar la sobrecarga:
void func ( string word, int b ) {
// some jobs
}
void func ( string word ) {
func( word, 999 );
}
void func ( int b ) {
func( "hello", b );
}
¿Estás tratando de hacer esto: argumento predeterminado en medio de la lista de parámetros?
– Nawaz
21 de abril de 2011 a las 6:54