5
/usr/include/i386-linux-gnu/bits/mathcalls.h:311:1: error: ambiguates old declaration ‘double round(double)’
g.cpp: In function ‘int round(double)’:
g.cpp:14:24: error: new declaration ‘int round(double)’
/usr/include/i386-linux-gnu/bits/mathcalls.h:311:1: error: ambiguates old declaration ‘double round(double)’
#include <iostream>
#include <cmath>
using namespace std;

int round(double number);

int main()
{
    double number = 5.9;
    round(number);
    return 0;
}
int round(double number)
{
    return static_cast<int>(floor(number + 0.5));
}

为什么我的编译器显示错误

4

1 回答 1

13

错误在这里非常明确。标<cmath>头已经引入了一个函数double round(double),您不能根据返回类型重载。是的,它是在std命名空间中定义的,但你正在做using namespace std;(它也是实现定义的,它是否在注入之前首先在全局命名空间中定义std)。为了完全可移植,您需要为您的函数指定一个不同的名称或将其粘贴在另一个名称空间中 - 或者,当然,使用为您提供的round函数<cmath>。但也要摆脱它using namespace std;

于 2012-12-26T20:08:09.277 回答