Отсутствует аргумент по умолчанию - ошибка компилятора - PullRequest
33 голосов
/ 21 апреля 2011
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 ]

67 голосов
/ 21 апреля 2011

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

31 голосов
/ 21 апреля 2011

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

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

void func(int b, string word = "hello")
12 голосов
/ 21 апреля 2011

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

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

void func ( string word, int b ) {

  // some jobs

}

void func ( int b ) { func("hello", b); }
8 голосов
/ 21 апреля 2011

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

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

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

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

void func (string word = "hello", int b = 0);
5 голосов
/ 21 апреля 2011

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

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

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

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

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