vs2019无法编译void和long

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