c++ g++ default-arguments

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"?