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")这样的函数? 我的编译器不能正常工作吗?
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)
错误消息是正确的.如果将默认参数分配给给定参数,则所有后续参数都应具有默认参数.你可以通过两种方式修复它;
(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)
如果不做任何更改,就无法修复它!
要解决此问题,可以使用重载:
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)
归档时间: |
|
查看次数: |
42069 次 |
最近记录: |