我收到此错误。
error: no matching function for call to ‘namespaceA::ClassA<namespaceB::someFunc<short int, 3u>, namespaceB::someFunc<float, 3u> >::funcFromA(int&, void (namespaceB::classB<namespaceB::someFunc<short int, 3u>, namespaceB::someFunc<float, 3u> >::*)(void*), int&)’
note: candidates are: void namespaceA::ClassA<TYPE_A, TYPE_B>::funcFromA(int, void (namespaceA::ClassA<TYPE_A, TYPE_B>::*)(void*), int) [with TYPE_A = namespaceB::someFunc<short int, 3u>, TYPE_B = namespaceB::someFunc<float, 3u>]
类是这样的
A类
template<typename TYPE_A, typename TYPE_B>
class ClassA {
typedef void (ClassA::*someTypeDef)(void*);
void funcFromA(int A, namespaceA::ClassA<TYPE_A, TYPE_B>::
someTypeDef takeFunc, int B);
}
A.cxx类void namespaceA::ClassA::funcFromA(int A,
namespaceA::ClassA::someTypeDef takeFunc, int B) {
// Do something with taken function
}
B类template<typename TYPE_A, typename TYPE_B>
class classB {
void classB<TYPE_A, TYPE_B>::CallThisFunc(void *someParm);
// Do Something
}
ClassB.cxxtemplate<typename TYPE_A, typename TYPE_B>
void classB<TYPE_A, TYPE_B>::CallThisFunc(void *someParm){
// Do something
}
template<typename TYPE_A, typename TYPE_B>
void classB<TYPE_A, TYPE_B>::MainFunc() {
int A = 1;
int B = 1;
ClassA->funcFromA(A, &classB::CallThisFunc, B); // <--- Error
}
我试图修复该错误,但未成功,并且正在杀死我。我该如何解决这个问题?
编辑:我想要完成的基本思想是有两个类,并且我试图在ClassB中调用ClassA函数,并且ClassB是模板化的,而ClassB中ClassA方法中的参数之一是typedef。
最佳答案
函数ClassA<A, B>::funcFromA()
以ClassA<A, B>
的成员函数为参数。但是,您尝试将ClassB<A, B>
的成员函数作为参数传递给它。由于ClassA<A, B>
和ClassB<A, B>
是不相关的,因此这显然不起作用。
顺便说一句,ClassB<A, B>::CallThisFunc
的冗余限定不会使您的代码更具可读性,尽管有些编译器接受,但我认为它实际上是非法的。
关于c++ - 没有匹配的函数用于调用c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259316/