関数のオーバーロードは、C コードを作成するときに非常に便利な機能です。関数に同じ名前を付けても、異なるパラメーターや戻り値の型を指定したり、異なる操作を実行したりできます。ただし、オーバーロードされた関数をコンパイルしようとすると、次のエラーが発生する場合があります。
「オーバーロードされた関数は、パラメーターが異なる場合にのみオーバーロードとみなされます。」
このエラーは通常、次の場合に発生します。関数名とパラメータは同じだが型が異なる関数が定義されています。これは、2 つの関数の名前とパラメーターが同じであるため、コンパイラーが 2 つの関数を区別できないことを意味します。そのため、コンパイル時にこれらは同じ関数として扱われ、そのためコンパイラーはエラーを生成します。
たとえば、次のコードを作成できます。
#include <iostream> void doSomething(int num) { std::cout << num << std::endl; } void doSomething(double num) { std::cout << num << std::endl; } int main() { doSomething(5); doSomething(3.14); return 0; }
このプログラムは、「doSomething」という名前の 2 つのオーバーロード関数を定義します。1 つは整数パラメーターを含み、もう 1 つは倍精度浮動小数点パラメーターを含みます。 main 関数では、これら 2 つの関数を異なる値で複数回呼び出します。ただし、このプログラムをコンパイルしようとすると、上記のエラー メッセージが表示されます。
この問題を解決するには、これら 2 つの関数のパラメーターを異なるものにする必要があります。つまり、それらを真にオーバーロードする必要があります。最も簡単な方法は、パラメータのタイプまたは数を変更することです。たとえば、上記のコードを次のように書き換えることができます。
#include <iostream> void doSomething(int num) { std::cout << num << std::endl; } void doSomething(double num1, double num2) { std::cout << num1 + num2 << std::endl; } int main() { doSomething(5); doSomething(3.14, 2.72); return 0; }
この書き換えられたコードでは、2 番目の関数のパラメーターを 1 つの倍精度浮動小数点数から 2 つの倍精度浮動小数点数に変更します。 2 つの機能の間に重複はありません。 main 関数では、別のパラメーターを使用してこれらを再度呼び出しますが、今回はコンパイル エラーは発生しません。
関数パラメーターを変更するもう 1 つの方法は、参照型またはポインター型を使用することです。たとえば、次のように記述できます:
#include <iostream> void doSomething(int& num) { std::cout << num << std::endl; } void doSomething(double& num) { std::cout << num << std::endl; } int main() { int x = 5; double y = 3.14; doSomething(x); doSomething(y); return 0; }
この新しいプログラムでは、最初の関数のパラメーターの型を int から int& に変更します。これは、この関数が整数ではなく整数参照を受け取ることを意味します。同様に、2 番目の関数のパラメーターの型を double から double& に変更しました。これは、この関数が倍精度浮動小数点数ではなく倍精度浮動小数点数への参照を受け取ることを意味します。このようにして、これら 2 つの関数は真のオーバーロード関数となり、メイン関数で異なる値を使用して呼び出すことができます。
つまり、関数のオーバーロードは、C コードを作成するときに非常に便利な機能です。ただし、「オーバーロードされた関数は、パラメーターが異なる場合にのみオーバーロードとみなされます」というコンパイラーからのエラー メッセージが表示された場合は、コンパイラーがそれらを区別できるように、関数のパラメーターを異なるものにする必要があります。それらの型、数値、参照、またはポインター型を変更して、それらを真のオーバーロード関数にすることができます。
以上がC++ コンパイル エラー: オーバーロードされた関数は、パラメーターが異なる場合にのみオーバーロードとみなされます。これを変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。