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?
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"?
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")
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); }
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);
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 );
}