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