2011-04-21 35 views
28
void func (string word = "hello", int b) { 

    // some jobs 

} 

in another function 

//calling 
func ("", 10) ; 

Cuando lo he compilado, el compilador emite un error;falta el argumento predeterminado - error del compilador

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 ("hi")? ¿Mi compilador no hace su trabajo correctamente?

+1

¿Estás tratando de hacer esto: [? Parámetros por defecto en el medio de la lista de parámetros] (http://stackoverflow.com/questions/5637679/ default-argument-in-the-middle-of-parameter-list) – Nawaz

Respuesta

54

No puede haber parámetros no predeterminados después de comienzan sus parámetros predeterminados. Dicho de otra manera, ¿cómo especificaría un valor para b dejando word con el valor predeterminado de "hola"?

24

Los argumentos con un valor predeterminado tienen que aparecer al final de la lista de argumentos.

Así que acaba de cambiar su declaración de la función de

void func(int b, string word = "hello") 
7

El mensaje de error es correcta. 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) cambiar el orden del argumento:

void func (int b, string word = "hello"); 

(2) asignar un valor predeterminado a b:

void func (string word = "hello", int b = 0); 
9

parámetros con valores predeterminados tienen que venir 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.

Debido a que sus argumentos tienen diferentes tipos, se puede obtener el mismo efecto usando una sobrecarga:

void func (string word, int b) { 

    // some jobs 

} 

void func (int b) { func("hello", b); } 
+0

+1 para sugerir la sobrecarga, logra exactamente la sintaxis de llamada que los argumentos medios predeterminados harían. –

3

Usted no se puede arreglar 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); 
} 
Cuestiones relacionadas