编写一个函数NumberOfPennies(),该函数在给定一定数量的美元和(可选)一定数量的便士的情况下,返回总的便士数量。例如:5美元和6便士可得到506。
对于上述问题,这是下面的代码。
收到错误消息:error: no matching function for call to 'NumberOfPennies(int)'
#include <iostream>
using namespace std;
int NumberOfPennies(int one,int two)
{
return (one*100+two);
}
int main() {
cout << NumberOfPennies(5, 6) << endl; // Should print 506
cout << NumberOfPennies(4) << endl; // Should print 400
return 0;
}
但是,当我将int two=0
放到函数NumberOfPennies
中时,它正在工作。为什么会这样呢?谁能解释一下。
#include <iostream>
using namespace std;
int NumberOfPennies(int one,int two=0)
{
return (one*100+two);
}
int main() {
cout << NumberOfPennies(5, 6) << endl; // Should print 506
cout << NumberOfPennies(4) << endl; // Should print 400
return 0;
}
答案 0 :(得分:3)
您在第二个代码段中写了int two = 0
的事实是您支持参数two
的默认值为0。
这意味着可以在呼叫站点将其省略,并假设使用默认值,因此
cout << NumberOfPennies(4) << endl;
和
cout << NumberOfPennies(4, 0) << endl;
是等效的。如果不对函数进行编码以支持默认值,则需要使用两个参数来调用NumberOfPennies
。
(为了提高可读性,请考虑将参数one
和two
分别重命名为dollars
和cents
)。
答案 1 :(得分:1)
在C ++中有一个称为默认参数的概念。查找此链接https://www.programiz.com/cpp-programming/default-argument
。
在第一种情况下,它无法将函数调用解析为仅采用一个整数参数的任何现有函数调用,并且失败。
int NumberOfPennies(int one,int two)
。
在第二种情况下,我们已经提到int NumberOfPennies(int one,int two=0)
,如果未传递第二个整数,则假定默认值为0
。在第一次运行时,编译器无法找到需要只是一个整数参数。接下来,它查找可能的情况,其中您的函数具有2个整数输入,其中一个具有默认值。您的函数符合这种情况,因此编译成功。
(其他信息:编写直观的函数名和参数会很有帮助。建议您将参数重命名为int NumberOfPennies(int dollars,int cents)
)
答案 2 :(得分:0)
“我运行了下面的代码,但是它不起作用”
不是对问题的有用描述。
为什么会这样?谁能解释一下。
您的问题在编译器错误报告中得到了明确说明,您应该在自己的帖子中列出。
error: no matching function for call to ‘NumberOfPennies(int)’
std::cout << NumberOfPennies(4) << std::endl;
^
note: candidate: int NumberOfPennies(int, int)
int NumberOfPennies(int one, int two)
^~~~~~~~~~~~~~~
note: candidate expects 2 arguments, 1 provided
因此,当声明需要2时,您尝试使用1个参数调用该函数。
通过添加第二个参数的默认值
int NumberOfPennies(int one,int two=0) ...
未提供第二个参数的值。
查看默认功能参数。