C++ c+中使用重载的模糊错误+;
我曾尝试使用带浮点和整数的重载。当我只使用整数时,代码运行良好,但当我包含浮点值时,它会给我带来错误。代码如下:C++ c+中使用重载的模糊错误+;,c++,overloading,overload-resolution,C++,Overloading,Overload Resolution,我曾尝试使用带浮点和整数的重载。当我只使用整数时,代码运行良好,但当我包含浮点值时,它会给我带来错误。代码如下: #include <iostream> using namespace std; int calculate(int x,int y); float calculate(float x,float y); const int MAININT=4; int main() { int result=calculate(5,5); float fresult
#include <iostream>
using namespace std;
int calculate(int x,int y);
float calculate(float x,float y);
const int MAININT=4;
int main()
{
int result=calculate(5,5);
float fresult=calculate(7.5,7.5); LINE X
cout << (result + MAININT + fresult); LINE Y
return 0;
}
int calculate(int x,int y)
{
int result=x*y;
return result;
}
float calculate(float x,float y)
{
int result=x*y;
return result;
}
我不理解错误消息,所以没有包括它们。我从宋源尧的回答中了解到我做错了什么,但下次我将从一开始就在问题中包含错误消息,这样就更容易在代码中看到我做错了什么。因为
7.5
是一个双精度(请参阅),而不是浮点数;隐式转换为int
或float
被认为是相同的排名
如果将7.5
设为float
,则可以使用后缀f
或f
将其设为float
文字。e、 g
float fresult = calculate(7.5f, 7.5f); // 7.5f is a float literal; no ambiguity
或使用显式转换:
float fresult = calculate(static_cast<float>(7.5), static_cast<float>(7.5));
float-fresult=计算(静态_-cast(7.5)、静态_-cast(7.5));
您应该已经发布了错误消息,该消息本身是不言自明的。错误消息提到了候选函数及其不完全兼容的原因:
默认情况下,浮点文本(7.5
)的类型为double
以下是确定浮点文字类型的后缀列表:
(无后缀)定义double
f
f
定义float
l
l
定义长双精度
虽然其他人已经告诉了您歧义错误的来源,但我很惊讶没有人提到这个问题的最简单解决方案:只需使用double
而不是float
就像整数的默认选择应该是int
,double
应该是浮点数的默认选择一样float
用于非常特殊的用例,这些用例都不可能适用于您的情况。请参阅软件工程堆栈交换
作为遵循本指南的一个副作用,您在这里的特殊问题消失了:
#include <iostream>
using namespace std;
int calculate(int x,int y);
double calculate(double x, double y);
const int MAININT=4;
int main()
{
int result=calculate(5,5);
double fresult=calculate(7.5,7.5);
cout << (result + MAININT + fresult);
return 0;
}
int calculate(int x,int y)
{
int result=x*y;
return result;
}
double calculate(double x, double y)
{
double result=x*y; // the `int` here was a mistake in your original code anyway
return result;
}
#包括
使用名称空间std;
int计算(int x,int y);
双计算(双x,双y);
常量int mainit=4;
int main()
{
int结果=计算(5,5);
double fresult=计算(7.5,7.5);
错误消息应该有助于理解。您阅读了吗?当您遇到此类问题时,请发布准确的错误消息。不包括错误消息的向下投票。智能用户可能会搜索错误消息中的固定文本。如果没有错误,他们将找不到此问题和答案。太好了!现在代码与您一起工作t错误。谢谢!
error: call of overloaded 'calculate(double, double)' is ambiguous
float fresult=calculate(7.5,7.5);
^
note: candidate: int calculate(int, int)
int calculate(int x,int y);
^
note: candidate: float calculate(float, float)
float calculate(float x,float y);
#include <iostream>
using namespace std;
int calculate(int x,int y);
double calculate(double x, double y);
const int MAININT=4;
int main()
{
int result=calculate(5,5);
double fresult=calculate(7.5,7.5);
cout << (result + MAININT + fresult);
return 0;
}
int calculate(int x,int y)
{
int result=x*y;
return result;
}
double calculate(double x, double y)
{
double result=x*y; // the `int` here was a mistake in your original code anyway
return result;
}