使用VS2017的C ++函数重载

时间:2018-02-11 21:22:51

标签: c++ function visual-studio-2017 overloading codeblocks

我在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;
}

1 个答案:

答案 0 :(得分:1)

您收到错误的原因是因为标准库中已经有一组名为abs的函数,通常必须使用std::进行访问,但using namespace std删除该限定符,在所有函数之间创建名称冲突。因此,您应该将函数名称更改为myAbs,或删除using namespace std。更好的更改是删除using语句重命名该函数。

您的代码显示了为什么应该避免using namespace std的关键原因,因为它可能导致命名空间冲突和不必要的混淆。