web-dev-qa-db-fra.com

Argument par défaut manquant - erreur du compilateur

void func ( string Word = "hello", int b ) {

  // some jobs

}

in another function

 //calling 
 func ( "", 10 ) ;

Quand je l'ai compilé, le compilateur émet une erreur;

default argument missing for parameter 

Comment puis-je le corriger sans rien changer, bien sûr, comme ne pas faire "int b = 0"? De plus, je veux utiliser cette fonction comme func (10) ou func ("hi")? Mon compilateur ne fait-il pas son travail correctement?

33
user478571

Vous ne pouvez pas avoir de paramètres non par défaut après vos paramètres par défaut commencent. Autrement dit, comment spécifieriez-vous une valeur pour b en laissant Word à la valeur par défaut de "bonjour"?

68
cnicutar

Les arguments avec une valeur par défaut doivent venir à la fin de la liste des arguments.

Il suffit donc de changer votre déclaration de fonction en

void func(int b, string Word = "hello")
31
Chris

Les paramètres avec des valeurs par défaut doivent apparaître à la fin de la liste car, lors de l'appel de la fonction, vous pouvez laisser les arguments à la fin, mais vous ne pouvez pas les manquer au milieu.

Puisque vos arguments ont différents types, vous pouvez obtenir le même effet en utilisant une surcharge:

void func ( string Word, int b ) {

  // some jobs

}

void func ( int b ) { func("hello", b); }
12
Mike Seymour

Le message d'erreur est correct. Si l'argument par défaut est affecté à un paramètre donné, tous les paramètres suivants doivent avoir un argument par défaut. Vous pouvez le réparer de 2 manières;

(1) changez l'ordre de l'argument:

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

(2) Attribuez une valeur par défaut à b:

void func (string Word = "hello", int b = 0);
8
iammilind

Vous ne pouvez pas le réparer sans rien changer!

Pour y remédier, vous pouvez utiliser la surcharge:

void func ( string Word, int b ) {
  // some jobs
}

void func ( string Word ) {
    func( Word, 999 );
}

void func ( int b ) {
    func( "hello", b );
}
5
anatolyg