Подтвердить что ты не робот

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

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 ( "привет" )? Неужели мой компилятор не выполняет свою работу, правильно?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

void func ( string word, int b ) {

  // some jobs

}

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

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

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

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