2013-10-08 67 views
1
class Emp 
{ 
    int no; 
    char name[50]; 
public: 
    void get_data(); 
} e; 

void func_get(); 

enum ITEMTYPE 
{ 
    MI_PARENT, MI_ACTION 
}; 

struct MENUITEM { 
    enum ITEMTYPE type; 
    char *name; 
    char *helpstring; 
    void *p; 
}; 

    // 1 
struct MENUITEM get_data = { 
    MI_ACTION,"Get","Enter to Get", e.get_data() }; // calling get_data() of type void by using abject e 

// 2 
struct MENUITEM root_draw = { 
    MI_PARENT, "Options", "Enter to list the Options Menu", (void*)func_get /* calling Global function which have return type void */ 
}; 
struct MENUITEM *draw_list[] = { 
    &get_data 
}; 

我使用上面我的程序代碼的錯誤,當我調用全局函數(案件// 2) 在程序執行properly.But當我試圖打電話函數使用類的對象(大小寫// 1)它顯示錯誤「類型void不允許的值」。 任何人都可以告訴我什麼是解決這個問題。我想無論如何打電話給我的課程功能。 在此先感謝。值類型爲void不允許在C++

+1

'e.get_data()'是一個函數**調用**,'func_get'是一個函數。 –

+0

好的..但如果我想調用get_data(),該怎麼做。 – kammy

+0

這沒有任何意義; 'func_get'返回'void';你不能把它分配給'void *'。 –

回答

0

檢查語法

(void*)func_get - this is not function call. 
1

supposeMENUITEM第四構件被認爲是一個指針,指向的回調函數。 (void*)func_get是功能func_get轉換爲void*的地址。同樣,你可以得到&Emp::get_data的地址,但是請記住該函數屬於類,而不是對象,所以你不能說&e.get_data。此外,作爲類的非靜態成員的函數get_data具有隱藏參數,即指針thisEmp* this)。因此,func_getget_data的簽名不相同,並且通過函數指針從類外調用get_data應該要求您將指針傳遞給對象。

相關問題