Нет подходящей функции для вызова c ++

0

Я получаю эту ошибку.

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
}

Я попытался исправить ошибку, но я не увенчался успехом и убил меня. Как исправить эту проблему?

Edit: Основная идея, которую я пытаюсь выполнить, - это два класса, и я пытаюсь вызвать ClassA-функцию внутри ClassB, а Template шаблона ClassB и один из параметров метода ClassA из ClassB - typedef.

Теги:
templates
compiler-errors
typedef

1 ответ

0

Функция ClassA<A, B>::funcFromA() принимает ClassA<A, B> функцию класса ClassA<A, B> качестве параметра. Однако вы пытаетесь передать ему функцию-член ClassB<A, B> качестве аргумента. Поскольку ClassA<A, B> и ClassB<A, B> не связаны, это явно не сработает.

BTW, избыточная квалификация ClassB<A, B>::CallThisFunc не делает ваш код более удобочитаемым, и я думаю, что он фактически является незаконным, хотя некоторые компиляторы принимают его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню