> 백엔드 개발 > C++ > 본문

C++ 컴파일 오류 해결 방법: ''함수' 호출과 일치하지 않습니까?

WBOY
풀어 주다: 2023-08-25 21:01:52
원래의
2628명이 탐색했습니다.

解决C++编译错误:'no match for call to 'function'',如何解决?

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++编译器无法找到匹配的函数来执行对函数对象的调用。当我们尝试调用一个函数对象时,编译器会查找一个与调用参数类型匹配的重载了函数调用操作符的函数。如果找不到匹配的函数,编译器就会报错。

要解决这个错误,我们可以采取以下几种方法:

  1. 在函数对象的类中添加额外的重载函数:根据我们的示例,我们可以为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

이 오류가 발생하는 이유는 C++ 컴파일러가 함수 개체에 대한 호출을 수행하는 데 일치하는 함수를 찾을 수 없기 때문입니다. 함수 개체를 호출하려고 하면 컴파일러는 호출 인수 유형과 일치하는 오버로드된 함수 호출 연산자가 있는 함수를 찾습니다. 일치하는 함수가 없으면 컴파일러는 오류를 보고합니다.
  1. 이 오류를 해결하려면 다음 접근 방식을 취할 수 있습니다.
    1. 함수 개체의 클래스에 추가 오버로드된 함수를 추가합니다. 예제에 따르면 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&amp; 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;
    }
    로그인 후 복사
    🎜🎜호출 방식 수정: 데이터 유형 변환을 수행할 수 없는 경우 호출 방식을 수정해 볼 수 있습니다. 부름. 예를 들어 함수 포인터를 사용하여 함수 개체의 함수 호출 연산자를 간접적으로 호출할 수 있습니다. 🎜🎜rrreee🎜위 방법 중 하나를 사용하면 "'함수' 호출과 일치하지 않음"이라는 컴파일 오류를 성공적으로 해결할 수 있습니다. 함수를 원활하게 실행합니다. 객체의 함수 호출 연산자입니다. 🎜🎜요약하자면, C++에서 함수 개체를 호출할 때 "'함수'에 대한 호출과 일치하지 않음" 컴파일 오류가 발생하면 추가 오버로드된 함수를 추가하거나 매개변수의 데이터 유형을 명시적으로 변환하거나 이 문제를 해결하려면 호출 방법을 수정하세요. 이 글의 내용이 여러분에게 도움이 되기를 바랍니다. 즐거운 코딩하세요!🎜

    위 내용은 C++ 컴파일 오류 해결 방법: ''함수' 호출과 일치하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    최신 이슈
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!