41
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" ) 之类的函数吗? 我的编译器没有正确地完成它的工作吗?

4

5 回答 5

82

默认参数开始后,您不能有非默认参数。换句话说,您将如何指定一个值以b保留word默认值 "hello" ?

于 2011-04-21T06:20:24.680 回答
35

具有默认值的参数必须位于参数列表的末尾。

所以只需将您的函数声明更改为

void func(int b, string word = "hello")
于 2011-04-21T06:20:30.523 回答
14

具有默认值的参数必须位于列表的末尾,因为在调用函数时,您可以将参数放在末尾,但不能在中间错过它们。

由于您的参数具有不同的类型,因此您可以使用重载获得相同的效果:

void func ( string word, int b ) {

  // some jobs

}

void func ( int b ) { func("hello", b); }
于 2011-04-21T06:24:07.147 回答
9

错误信息是正确的。如果将默认参数分配给给定参数,则所有后续参数都应具有默认参数。您可以通过两种方式修复它;

(1) 改变参数的顺序:

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

(2) 为 分配一个默认值b

void func (string word = "hello", int b = 0);
于 2011-04-21T06:22:06.500 回答
5

你不能在不改变任何东西的情况下修复它!

要修复它,您可以使用重载:

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

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

void func ( int b ) {
    func( "hello", b );
}
于 2011-04-21T06:45:44.230 回答