vs2013编译器通不过,别的编译器就能通过,这是为什么

circujoker_06 2015-12-23 07:38:09
#include<iostream>
using namespace std;

int abs(int a);//当参数为整型数据时的函数原型
float abs(float a);//当参数为浮点型数据时的函数原型
double abs(double a);//当参数为双精度型数据时的函数原型
int main()
{
int a = -5, b = 3;
float c = -2.4f, d = 8.4f;
double e = -3e-9, f = 3e6;
cout << "a=" << abs(a) << endl << "b=" << abs(b) << endl;//输出函数返回的结果
cout << "c=" << abs(c) << endl << "d=" << abs(d) << endl;
cout << "e=" << abs(e) << endl << "f=" << abs(f) << endl;
return 0;
}
int abs(int a)//函数定义
{
cout << "int abs" << endl;//显示运行了哪个函数
return (a >= 0 ? a : -a);//如果a大于等于零则返回a,否则返回-a。
}
float abs(float a)
{
cout << "float abs" << endl;
return (a >= 0 ? a : -a);
}
double abs(double a)
{
cout << "double abs" << endl;
return (a >= 0 ? a : -a);
}

想知道为什么,这个程序为什么在vs2013上面通不过。知道是函数重载,基本知识点就不用回答了
...全文
243 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
draculamx 2016-01-19
  • 打赏
  • 举报
回复
其实我更好奇,#include<iostream>之后,会自动包含 math.h ,这个在VS2015里面是默认的,原来的编译器, math.h貌似是需要程序员自己去手动包含的,我也看了一下 iostream 的源文件,没看出哪里包含了 math.h 。。。
draculamx 2015-12-24
  • 打赏
  • 举报
回复
我机器上只有2015,试了一下,提示错误: Severity Code Description Project File Line Error C2382 'abs': redefinition; different exception specifications ConsoleApplication1 e:\360cloud\workspace\vc2015\consoleapplication1\consoleapplication1\source.cpp 9 提示abs这个函数重定义了,原因是#include<iostream>之后,会自动包含 math.h 到工程中,而 math.h 中,已经定义了三个函数: _Check_return_ int __cdecl abs(_In_ int _X); _Check_return_ long __cdecl labs(_In_ long _X); _Check_return_ long long __cdecl llabs(_In_ long long _X); 和你自己定义的: int abs(int a);//当参数为整型数据时的函数原型 float abs(float a);//当参数为浮点型数据时的函数原型 double abs(double a);//当参数为双精度型数据时的函数原型 发生了冲突 所以,你要做的只是把你自己定义的函数abs换个名字就行了。。。
draculamx 2015-12-24
  • 打赏
  • 举报
回复
我机器上只有2015,试了一下,提示错误: Severity Code Description Project File Line Error C2382 'abs': redefinition; different exception specifications ConsoleApplication1 e:\360cloud\workspace\vc2015\consoleapplication1\consoleapplication1\source.cpp 9 提示abs这个函数重定义了,原因是#include<iostream>之后,会自动包含 math.h 到工程中,而 math.h 中,已经定义了三个函数: _Check_return_ int __cdecl abs(_In_ int _X); _Check_return_ long __cdecl labs(_In_ long _X); _Check_return_ long long __cdecl llabs(_In_ long long _X); 和你自己定义的: int abs(int a);//当参数为整型数据时的函数原型 float abs(float a);//当参数为浮点型数据时的函数原型 double abs(double a);//当参数为双精度型数据时的函数原型 发生了冲突 所以,你要做的只是把你自己定义的函数abs换个名字就行了。。。
circujoker_06 2015-12-24
  • 打赏
  • 举报
回复
引用 2 楼 draculamx 的回复:
我机器上只有2015,试了一下,提示错误: Severity Code Description Project File Line Error C2382 'abs': redefinition; different exception specifications ConsoleApplication1 e:\360cloud\workspace\vc2015\consoleapplication1\consoleapplication1\source.cpp 9 提示abs这个函数重定义了,原因是#include<iostream>之后,会自动包含 math.h 到工程中,而 math.h 中,已经定义了三个函数: _Check_return_ int __cdecl abs(_In_ int _X); _Check_return_ long __cdecl labs(_In_ long _X); _Check_return_ long long __cdecl llabs(_In_ long long _X); 和你自己定义的: int abs(int a);//当参数为整型数据时的函数原型 float abs(float a);//当参数为浮点型数据时的函数原型 double abs(double a);//当参数为双精度型数据时的函数原型 发生了冲突 所以,你要做的只是把你自己定义的函数abs换个名字就行了。。。
是的 我后来发现了,我的电脑上面是vs2013,没有像2015提示的那么完整,再加上这个程序是别人发给我的,自己只关注了函数的重载问题,忽略了abs这个系统原有的函数定义。说明自己对程序还是没有理解到位或者说只是入门水平吧

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧