缺少默认参数 - 编译器错误

47
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(“hi”)一样? 我的编译器没有正常工作吗?


2
你是否正在尝试这样做:参数列表中间的默认参数? - Nawaz
5个回答

88

在默认参数开始后,您不能拥有非默认参数。换句话说,如果您想为变量b指定一个值,同时保持word的默认值为"hello",该怎么做呢?


36

具有默认值的参数必须出现在参数列表的末尾。

因此,只需将函数声明更改为

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

15

具有默认值的参数必须出现在参数列表的末尾,因为在调用函数时,您可以省略最后的参数,但不能在中间省略它们。

由于您的参数具有不同的类型,您可以使用重载来实现相同的效果:

void func ( string word, int b ) {

  // some jobs

}

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

+1 建议使用重载,它可以完美地实现默认中间参数的调用语法。 - Matthieu M.

9
错误信息是正确的。如果将默认参数分配给给定的参数,则所有后续参数都应具有默认参数。您可以通过以下两种方式进行修复:
(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 );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接