2011-05-02 153 views
1

定義(Core.h):如何在類初始化時使用非靜態類函數初始化靜態函數指針?

static int (*foolink)(int*, char*, key*, key*); 

在Core.cpp還重新定義。此代碼導致錯誤:

foolink = this->step; 

錯誤:

Engine/Core.cpp:31: error: argument of type 'int (Core::)(int*, char*, key*, key*)' does not match 'int (*)(int*, char*, key*, key*)' 

指針使用:

(*foolink)(NULL, NULL, NULL, NULL); 

有什麼不對?請幫幫我!

回答

3

在C++程序中,大多數函數都是成員函數;也就是說,他們是班級的一部分。您不允許使用普通的函數指針指向成員函數;相反,您必須使用成員函數指針

在你的情況,你可以將它定義爲

 v you have to name the class here 
int (YourClass::*foolink)(int*, char*, key*, key*); 
foolink = &YourClass::step; 

// This is how you can call the function via member function pointer 
YourClass object, *pObject = &object; 
// One way is to envoke the function from object 
(object.*foolink)(...); 
// The other way is from pointer to object 
(pObject->*foolink)(...); 

C++ FAQ

Pointers to Member Functions

+0

我怎麼能打電話嗎? (Core :: * foolink)(NULL,NULL,NULL,NULL)不起作用! – HiTECNOLOGYs 2011-05-02 02:59:18

+0

@HiTECNOLOGYs:我會更新我的答案,涉及函數的調用:) – 2011-05-02 03:25:39

1

this->step的類型必須是返回一個整數並將int *,char *,key *和key *作爲參數的函數。顯然不是。請記住,將類方法分配給普通函數將不起作用;他們都必須是方法,或兩者​​都是正常的功能,但不是混合,這是我懷疑你想要做的。