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
 };

プログラムで上記のコードを使用していますが、グローバル関数 (case//2) を呼び出すと、プログラムは適切に実行されます。しかし、クラス (case //1) のオブジェクトを使用して関数を呼び出そうとすると、エラー「Valueタイプ void は許可されていません」。誰でもこれの解決策を教えてもらえますか?とにかくクラス関数を呼び出したいです。前もって感謝します。

4

2 に答える 2

2

Isupposeの 4 番目のメンバーはMENUITEM、コールバック関数へのポインターであると想定されています。にキャストされる(void*)func_get関数のアドレスです。同様に、 のアドレスを取得できますが、この関数はオブジェクトではなくクラスに属しているため、 とは言えません。また、クラスの非静的メンバーである関数には、ポインター( ) という隠しパラメーターがあります。その結果、 と のシグネチャは同一ではなく、関数ポインターを介してクラスの外部から呼び出すには、ポインターをオブジェクトに渡す必要があります。func_getvoid*&Emp::get_data&e.get_dataget_datathisEmp* thisfunc_getget_dataget_data

于 2013-10-08T20:42:45.210 に答える
0

構文をチェックする

(void*)func_get - this is not function call. 
于 2013-10-08T20:34:33.413 に答える