我在VS2017中编译这个简单代码时遇到了问题,但代码在代码块中工作正常。 在VS2017中,我收到了以下错误消息:
C2382' abs':重新定义;不同的异常规范
以下是代码:
#include <iostream>
using namespace std;
int abs(int i);
float abs(float f);
int main()
{
cout << abs(-10) << endl;
cout << abs(-11.0f) << endl;
return 0;
}
int abs(int i)
{
cout << "Using integer abs()\n";
return i<0 ? -i : i;
}
float abs(float f)
{
cout << "Using float abs()\n";
return f<0.0f ? -f : f;
}
答案 0 :(得分:1)
您收到错误的原因是因为标准库中已经有一组名为abs
的函数,通常必须使用std::
进行访问,但using namespace std
删除该限定符,在所有函数之间创建名称冲突。因此,您应该将函数名称更改为myAbs
,或删除using namespace std
。更好的更改是删除using
语句和重命名该函数。
您的代码显示了为什么应该避免using namespace std
的关键原因,因为它可能导致命名空间冲突和不必要的混淆。