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

时间:2011-04-21 06:18:52

标签: c++ g++ default-arguments

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”)这样的函数? 我的编译器不能正常工作吗?

5 个答案:

答案 0 :(得分:67)

默认参数开始后,您不能拥有非默认参数。换句话说,如何为b指定一个值word为默认值“hello”?

答案 1 :(得分:31)

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

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

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

答案 2 :(得分:12)

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

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

void func ( string word, int b ) {

  // some jobs

}

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

答案 3 :(得分:8)

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

(1)改变参数的顺序:

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

(2)将默认值分配给b

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

答案 4 :(得分:5)

如果不改变任何内容,你无法修复它!

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

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

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

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