2012-03-20 51 views
0

我正試圖在將用於稍後在我的程序中調用函數的結構中存儲指向成員函數的指針。將成員函數作爲函數指針存儲在C++中時出錯

事情是這樣的:

// abc.h 
namespace XYZ { 
typedef void func(const uint8_t *buf, int len); 
struct holder 
{ 
    // other members 
    func * storePtr; 
} 
} // end of namespace 

其他文件:

// pqr.h 
#include abc.h 
namespace XYZ { 
class pqr { 
    // data members and other functions 
    void func1(const uint8_t *buffer, int length); 
    void func2(func *section); 
    void func3(); 
    } 
} // end of namespace 

現在我的cpp文件需要存儲此FUNC1的例子在我的結構成員storePtr

// app.cpp 
#include pqr.h 
void pqr::funct3() 
{ 
    // Do something 
    func2(func1); 
} 
void pqr::func2(func * section) 
{ 
    holder h; 
    h.storePtr = section; 
} 

但是我收到編譯錯誤在「func2(func1);」作爲 「錯誤C3867:‘PQR :: FUNC1’:函數調用缺少參數列表;使用‘& PQR :: FUNC1’創建成員指針」

我用& PQR ::界定範圍,但它也不能解決我的問題,我無法理解要做什麼。

回答

1

指向成員函數是不一樣的東西指針正常功能 - 看看說明和示例在這裏:http://msdn.microsoft.com/en-us/library/k8336763.aspx

+0

不過,我將如何調用成員函數從存儲在結構中的函數指針? 如果我存儲了創建的結構並稍後使用它來調用該函數。 – Garfield 2012-03-21 11:54:13

+1

如果它是一個非靜態成員函數,則始終需要該對象能夠調用它 - 該對象是函數的隱式參數。你既可以保存對象也可以保存結構中的指針,或者更改整個結構,以便可以使用靜態成員 - 或者只是簡單的函數。 – MiMo 2012-03-21 13:53:54