使用 VS2017 的 C++ 函数重载
Function overload with C++ using VS2017
我在 VS2017 中编译这段简单代码时遇到问题,但代码在代码块中运行良好。
在 VS2017 中,我收到此错误消息:
C2382 'abs':redefinition; different exception specifications
下面是代码:
#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;
}
您收到错误的原因是因为标准库中已经有一组名为 abs
的函数,通常必须使用 std::
访问这些函数,但是 using namespace std
删除该限定符,在所有函数之间造成名称冲突。因此,您应该将函数名称更改为 myAbs
之类的名称,或者删除 using namespace std
。更好的更改是同时删除 using
语句 和 重命名函数。
您的代码展示了为什么应避免 using namespace std
的一个关键原因,因为它会导致命名空间冲突和不必要的混淆。
我在 VS2017 中编译这段简单代码时遇到问题,但代码在代码块中运行良好。 在 VS2017 中,我收到此错误消息:
C2382 'abs':redefinition; different exception specifications
下面是代码:
#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;
}
您收到错误的原因是因为标准库中已经有一组名为 abs
的函数,通常必须使用 std::
访问这些函数,但是 using namespace std
删除该限定符,在所有函数之间造成名称冲突。因此,您应该将函数名称更改为 myAbs
之类的名称,或者删除 using namespace std
。更好的更改是同时删除 using
语句 和 重命名函数。
您的代码展示了为什么应避免 using namespace std
的一个关键原因,因为它会导致命名空间冲突和不必要的混淆。