void只是警告,而不是不能编译。真正的错误看error内容,也就是最后一行的print重载不明确的问题。这个和编译器之类的有关系,有些编译器严格点就是long类型必须重载到long,而不能重载成int或者double。有些编译器就比较鸡贼,随便给你塞进去一个,然后强制转成函数参数类型。
给你看看我2015就没有这回事。而除了float和double重载的是double,其他类型全部重载到int,尽管long已经超过了int。但是如果加上long的重载,就直接走重载long的函数了
#include "stdafx.h"
#include <iostream>
using namespace std;
double print(double n) {
cout << "该类型调用了double重载函数:";
return 2 * n;
}
int print(int n) {
cout << "该类型调用了int重载函数:";
return n*n; }
/*long print(long n) {
cout << "该类型调用了long重载函数:";
return 3*n;
}*/
void main()
{
double d = 22.00521;
float f = 6.2;
int a = 20;
char c = 'a';
short s = 25;
long l = 9;
long ll = 999999;
cout << print(a) << " 结果类型是:" << typeid(print(a)).name() << endl;
cout << print(c) << " 结果类型是:" << typeid(print(c)).name() << endl;
cout << print(s) <<" 结果类型是:" << typeid(print(s)).name() << endl;
cout << print(l) << " 结果类型是:" << typeid(print(l)).name() << endl;
cout << print(ll) << " 结果类型是:" << typeid(print(ll)).name() << endl;//如果调用int,溢出,如果调用double,则正常
cout << print(f) << " 结果类型是:" << typeid(print(f)).name() << endl;
cout << print(d) << " 结果类型是:" << typeid(print(d)).name() << endl;
system("pause");
//return 0;
}
代码发下,看看
应该是函数后面多个分号吧!
你声明的函数大括号后面多了分号‘;’
不对啊,在我这边运行没问题啊!!!
要不你不要用函数重载试试?
照着课本的读程序题目写的代码
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y