Отсутствует аргумент по умолчанию - ошибка компилятора

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

  // some jobs

}

in another function

 //calling 
 func ( "", 10 ) ;

когда я скомпилировал его, компилятор выдает ошибку ;

default argument missing for parameter 

как могу ли я исправить это, ничего не меняя, конечно, например, не делая "int b = 0" ? Кроме того, я хочу использовать эту функцию как func ( 10 ) или func ( "привет" ) ? мой компилятор не выполняет свою работу должным образом ?

5 ответов


вы не можете иметь нестандартные параметры после параметры по умолчанию начнется. Другими словами, как бы вы указали значение для b оставив word по умолчанию "hello"?


аргументы со значением по умолчанию должны находиться в конце списка аргументов.

поэтому просто измените объявление функции на

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

параметры со значениями по умолчанию должны находиться в конце списка, потому что при вызове функции вы можете оставить аргументы в конце, но не можете пропустить их посередине.

поскольку ваши аргументы имеют разные типы, вы можете получить тот же эффект с помощью перегрузки:

void func ( string word, int b ) {

  // some jobs

}

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

сообщение об ошибке, является правильным. Если заданному параметру назначен аргумент по умолчанию, то все последующие параметры должны иметь аргумент по умолчанию. Вы можете исправить это двумя способами;

(1) измените порядок аргумента:

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

(2) присвоить значение по умолчанию b:

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

вы не можете исправить это, ничего не меняя!

чтобы исправить это, вы можете использовать перегрузку:

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

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

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