How to solve C++ compilation error: 'no match for call to 'function'?

WBOY
Release: 2023-08-25 21:01:52
Original
2518 people have browsed it

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

Solution to C compilation error: 'no match for call to 'function', how to solve it?

When developing using the C programming language, we will inevitably encounter various compilation errors. One of the common errors is "no match for call to 'function'". This error usually occurs when we try to call a function object. This article will explain the causes of this error and provide some solutions.

First, let’s look at a simple example of this error:

#include  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; }
Copy after login

In the above example, we defined a class namedMyFunctor, which repeats The function call operatoroperator()is loaded and a message is output in the function. In themainfunction, we create an objectmyFunctorof typeMyFunctorand try to perform function operations by calling this object. However, when we try to compile this code, we encounter the above compilation error.

The reason for this error is that the C compiler cannot find a matching function to perform the call to the function object. When we try to call a function object, the compiler looks for a function with an overloaded function call operator that matches the call argument type. If no matching function is found, the compiler will report an error.

To solve this error, we can take the following approaches:

  1. Add additional overloaded functions in the class of the function object: According to our example, we can # The ##MyFunctorclass adds an overloaded function that accepts aconstmodified parameter:
  2. 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; } };
    Copy after login
In this case, we can do this by using a

constQuote to pass parameters to avoid compilation errors. For example:

int main() { MyFunctor myFunctor; myFunctor(10); // 调用重载函数 void operator()(const int& x) return 0; }
Copy after login

    Explicitly convert the data type of the parameter: If we cannot modify the class of the function object, or do not want to add additional overloaded functions to the class, we can try to explicitly convert the parameter type of data. For example, we can convert the type of the call parameter to the type accepted by the function object overloaded function:
  1. int main() { MyFunctor myFunctor; myFunctor(static_cast(10)); // 显式转换类型为 int return 0; }
    Copy after login
    Modify the way of the call: If we cannot perform data type conversion, we can try to modify the call The way. For example, we can indirectly call the function call operator of a function object by using a function pointer:
  1. int main() { MyFunctor myFunctor; void (MyFunctor::*functionPtr)(int) = &MyFunctor::operator(); (myFunctor.*functionPtr)(10); // 通过函数指针间接调用函数对象的函数调用操作符 return 0; }
    Copy after login
    With one of the above methods, we can successfully solve the compilation error "no match for call to 'function' ”, and successfully execute the function call operator of the function object.

    To summarize, when we call a function object in C, if we encounter a "no match for call to 'function'" compilation error, we can try to add additional overloaded functions and explicitly convert parameters data type or modify the calling method to solve this problem. I hope the content of this article can help you. Happy coding!

    The above is the detailed content of How to solve C++ compilation error: 'no match for call to 'function'?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!