“参数缺少默认参数”编译器错误

问题描述 投票:0回答:5
void func ( string word = "hello", int b ) {
    // some jobs
}

在另一个函数中

//calling 
func ( "", 10 ) ;

当我编译时,它会发出此错误:

参数缺少默认参数

我想使用该功能,例如

func ( 10 )
func ( "hi" )

如何在不更改任何内容(例如设置

int b = 0
)的情况下修复它?

c++ g++ default-arguments
5个回答
88
投票

默认参数开始后不能有非默认参数。换句话说,您如何指定 b

 的值,而将 
word
 保留为默认值“hello”?


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

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

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

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

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

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

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

(1) 改变参数的顺序:

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

(2) 为

b

指定默认值:

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

5
投票
不做任何改变就无法修复它!

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

void func ( string word, int b ) { // some jobs } void func ( string word ) { func( word, 999 ); } void func ( int b ) { func( "hello", b ); }
    
© www.soinside.com 2019 - 2024. All rights reserved.