Ответ 1
У вас не может быть параметров, отличных от параметров по умолчанию, после запуска параметров по умолчанию. Иными словами, как бы вы указали значение для b
, оставив word
по умолчанию "hello"?
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 ( "привет" )? Неужели мой компилятор не выполняет свою работу, правильно?
У вас не может быть параметров, отличных от параметров по умолчанию, после запуска параметров по умолчанию. Иными словами, как бы вы указали значение для 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 );
}