C コンパイル エラーの解決策:「'関数' の呼び出しに一致しません。解決方法は?」
C プログラミング言語を使用して開発を行うと、さまざまなコンパイル エラーが避けられません。よくあるエラーの 1 つは、「'関数' の呼び出しに一致しません」です。このエラーは通常、関数オブジェクトを呼び出そうとしたときに発生します。この記事では、このエラーの原因といくつかの解決策を説明します。
まず、このエラーの簡単な例を見てみましょう:
#include <iostream> class MyFunctor { public: void operator()(int x) { std::cout << "Hello world! The value of x is: " << x << std::endl; } }; int main() { MyFunctor myFunctor; myFunctor(10); // 编译错误发生在这里 return 0; }
上の例では、関数呼び出し演算子 # を繰り返す MyFunctor
という名前のクラスを定義しました。 ##operator() がロードされ、関数内にメッセージが出力されます。
main 関数では、
MyFunctor 型のオブジェクト
myFunctor を作成し、このオブジェクトを呼び出して関数操作を実行しようとします。ただし、このコードをコンパイルしようとすると、上記のコンパイル エラーが発生します。
クラスは、
const 変更されたパラメーターを受け入れるオーバーロードされた関数を追加します:
class MyFunctor { public: void operator()(int x) { std::cout << "Hello world! The value of x is: " << x << std::endl; } void operator()(const int& x) { std::cout << "Hello world! The value of x is (const ref): " << x << std::endl; } };
const を使用してこれを行うことができます。コンパイルエラーを避けるためにパラメータを渡すために引用符を付けます。例:
int main() { MyFunctor myFunctor; myFunctor(10); // 调用重载函数 void operator()(const int& x) return 0; }
int main() { MyFunctor myFunctor; myFunctor(static_cast<int>(10)); // 显式转换类型为 int return 0; }
int main() { MyFunctor myFunctor; void (MyFunctor::*functionPtr)(int) = &MyFunctor::operator(); (myFunctor.*functionPtr)(10); // 通过函数指针间接调用函数对象的函数调用操作符 return 0; }
以上がC++ コンパイル エラーを解決する方法: 「'関数' の呼び出しに一致しません」の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。