1. ホーム
  2. c++

[解決済み] 戻り値の型だけで区別される関数をオーバーロードすることはできません」とはどういう意味ですか?

2022-02-17 10:13:13

質問

このようなコードがあります。

ヘッダーに

...
int32_t round(float v);
...

で、ソースに

...
int32_t round(float v)
{
    int32_t t = (int32_t)std::floor(v);
    if((v - t) > 0.5)
        return t + 1;

    return t;
}
...

このサイトのここを見て回ったのですが、私にはちょっと例が複雑すぎるようです。

C++を勉強中なので、どなたかエラーの意味と発生する理由を説明していただけるとありがたいです。

解決方法を教えてください。

関数のオーバーロード とは、同じ名前のメソッドを複数持つことです。

さて、コンパイラは、正しいオーバーロード・メソッドを決定するために、メソッド名と引数は見ますが、戻り値は見ません。つまり、もし

int round(float something) { ... }
float round(float something) { ... }

そうすると、コンパイラはそれらを区別することができず、コールポイントでどれを呼び出したいのかがわからなくなります。つまり、あなたの場合、すでに別の round を受け付けるメソッドです。 float .