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 に答える