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

34 c++ g++ default-arguments

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

  // some jobs

}

in another function

 //calling 
 func ( "", 10 ) ;
Run Code Online (Sandbox Code Playgroud)

当我编译它时,编译器会发出错误;

default argument missing for parameter 
Run Code Online (Sandbox Code Playgroud)

当然,如何在不改变任何内容的情况下修复它,例如不使"int b = 0"?而且,我想使用像func(10)或func("hi")这样的函数? 我的编译器不能正常工作吗?

cni*_*tar 69

默认参数开始后,您不能拥有非默认参数.换句话说,你会如何指定的值b留下word来的"你好"默认?


Chr*_*ris 31

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

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

void func(int b, string word = "hello")
Run Code Online (Sandbox Code Playgroud)


Mik*_*our 12

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

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

void func ( string word, int b ) {

  // some jobs

}

void func ( int b ) { func("hello", b); }
Run Code Online (Sandbox Code Playgroud)


iam*_*ind 8

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

(1)改变参数的顺序:

void func (int b, string word = "hello");
Run Code Online (Sandbox Code Playgroud)

(2)将默认值分配给b:

void func (string word = "hello", int b = 0);
Run Code Online (Sandbox Code Playgroud)


ana*_*lyg 5

如果不做任何更改,就无法修复它!

要解决此问题,可以使用重载:

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

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

void func ( int b ) {
    func( "hello", b );
}
Run Code Online (Sandbox Code Playgroud)