C++ 컴파일 오류 해결: ''함수' 호출과 일치하지 않습니다. 어떻게 해결하나요?
C++ 프로그래밍 언어를 사용하여 개발하다 보면 필연적으로 다양한 컴파일 오류에 직면하게 됩니다. 일반적인 오류 중 하나는 "'함수' 호출과 일치하지 않습니다"입니다. 이 오류는 일반적으로 함수 개체를 호출하려고 할 때 발생합니다. 이 문서에서는 이 오류의 원인을 설명하고 몇 가지 해결 방법을 제공합니다.
먼저 이 오류의 간단한 예를 살펴보겠습니다.
#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; }
위의 예에서는 함수 호출 연산자operator()</code를 오버로드하는 <code>MyFunctor
라는 클래스를 정의했습니다. >, 함수에 메시지를 출력합니다. main
함수에서 MyFunctor
유형의 myFunctor
개체를 만들고 이 개체를 호출하여 함수 작업을 수행하려고 합니다. 그러나 이 코드를 컴파일하려고 하면 위의 컴파일 오류가 발생합니다. MyFunctor
的类,它重载了函数调用操作符operator()
,并在该函数中输出一条消息。在main
函数中,我们创建了一个MyFunctor
类型的对象myFunctor
,并尝试通过调用这个对象来执行函数操作。然而,当我们尝试编译这段代码时,就会遇到上述的编译错误。
这个错误的原因是,C++编译器无法找到匹配的函数来执行对函数对象的调用。当我们尝试调用一个函数对象时,编译器会查找一个与调用参数类型匹配的重载了函数调用操作符的函数。如果找不到匹配的函数,编译器就会报错。
要解决这个错误,我们可以采取以下几种方法:
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
const</code를 허용하는 오버로드된 함수를 추가할 수 있습니다. > 수정된 매개변수: <ol start="3"><li><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>int main() {
MyFunctor myFunctor;
myFunctor(10); // 调用重载函数 void operator()(const int& x)
return 0;
}</pre><div class="contentsignin">로그인 후 복사</div></div></li>이 경우 <code>const
참조 실수를 사용하여 매개변수를 전달하면 컴파일을 피할 수 있습니다. 예: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!