【问题标题】:No matching function for call c++调用 c++ 没有匹配的函数
【发布时间】:2013-10-08 22:04:33
【问题描述】:

我收到此错误。

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>]

类是这样的

ClassA.h

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);

}

ClassA.cxx

void namespaceA::ClassA::funcFromA(int A, 
          namespaceA::ClassA::someTypeDef takeFunc, int B) {
    // Do something with taken function
}

ClassB.h

template<typename TYPE_A, typename TYPE_B>
class classB {
void classB<TYPE_A, TYPE_B>::CallThisFunc(void *someParm);
    // Do Something
}

ClassB.cxx

template<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。

【问题讨论】:

  • 这太复杂了,请认真地发布更多代码,并将该错误分解为几行,滚动很难阅读!我正在等待回答,所以请在其中写下@AlecTeal 的评论。
  • 我把代码分成几行,还有错误消息。对于那个很抱歉。这有帮助吗?
  • 你能发布一个你正在尝试编译的例子吗

标签: c++ templates compiler-errors typedef


【解决方案1】:

函数ClassA&lt;A, B&gt;::funcFromA()ClassA&lt;A, B&gt; 的成员函数为参数。不过,您尝试将ClassB&lt;A, B&gt; 的成员函数作为参数传递给它。由于ClassA&lt;A, B&gt;ClassB&lt;A, B&gt; 不相关,这显然行不通。

顺便说一句,ClassB&lt;A, B&gt;::CallThisFunc 的冗余限定不会使您的代码更具可读性,我认为它实际上是非法的,尽管一些编译器接受它。

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 2016-11-23
    • 2012-05-27
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多