2013-10-08 140 views
0

我得到這個錯誤。沒有匹配函數調用C++

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。

+0

這就是令人費解,使感,請張貼更多的代碼,嚴重,並打破該錯誤了幾行字,很難通過滾動閱讀!我在等待回答,所以請在@AlecTeal中寫下評論。 –

+0

我把代碼分解成了幾行,還有錯誤信息。對於那個很抱歉。這有幫助嗎? – js0823

+0

你可以發佈一個正是你試圖編譯的例子 – aaronman

回答

0

功能ClassA<A, B>::funcFromA()需要的ClassA<A, B>作爲參數的成員函數。不過,您嘗試將它作爲參數傳遞給參數ClassB<A, B>的成員函數。由於ClassA<A, B>ClassB<A, B>是不相關的,這顯然不起作用。

順便說一句,ClassB<A, B>::CallThisFunc冗餘資格不會讓你的代碼更具可讀性,我認爲它實際上是非法的,雖然有些編譯器接受它。