2017-05-05 183 views
-8

我試圖導入到C++類,一些Ç代碼,這是非常複雜的,我不明白(請儘量不要殺我,我不知道C++使用類的成員函數指針

裏面一個cpp I類有成員:

void Bluetooth::nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length) 
{...} 

void Bluetooth::services_init(void) 
{ 

    ble_nus_init_t nus_init; 
    nus_init.data_handler = nus_data_handler; //********* problem is here ! 
} 

所以,當這兩個功能是相同的C文件,其確定,但是當他們是一個C++ CLAS成員有一個錯誤,我不能將此功能從一種轉換到另一種。

我明顯做了一些愚蠢的事情,如何糾正它?

+1

在我看來,這是一個正確的問題(沒有用正確的術語表達)。 –

+2

@AlejandroMontilla不,不是。 MCVE在哪裏? – LogicStuff

+0

您沒有顯示您嘗試*使用*的上下文。 C++類的成員函數有一個隱含的'this'指針被傳遞(通常作爲第一個參數,但我認爲這取決於實現),因此它們不能被視爲「常規」C函數。如果你有一個'static'函數,那麼它就不是一個真正的成員,並且可以像對待一個普通的C函數一樣處理。如果它*具有*作爲成員函數,那麼你有很多工作要做,而且問題中沒有足夠的代碼讓我們知道如何幫助你。 –

回答

1

將類添加到混合中時,C++中的函數指針開始變得棘手。看看這個問題:function pointers to member functions。您需要處理的隱式this指針。畢竟,該功能不存在於對象的INSTANTIATION之外。除非函數被定義爲靜態,否則你應該工作。