2013-08-26 23 views
0

我只是X-Windows的新手,並試圖在Linux上像Window一樣調用簡單的MessageBox的代碼。如何編譯使用Netbeans在Ubuntu 64位上實現Xm的代碼?

我在Ubuntu 12.04LTS 64bit並安裝了Netbeans完整版本。 我在這個項目中包含了「/ usr/include/Xm」,而對於libs,我包含了「Motif」庫。

,當我編譯代碼出現以下錯誤:

main.cpp:24:63: error: invalid conversion from ‘void (*)(Widget, XtPointer, XmPushButtonCallbackStruct*) {aka void (*)(_WidgetRec*, void*, XmPushButtonCallbackStruct*)}’ to ‘XtCallbackProc {aka void (*)(_WidgetRec*, void*, void*)}’ [-fpermissive] 
/usr/include/X11/Intrinsic.h:1241:13: error: initializing argument 3 of ‘void XtAddCallback(Widget, const char*, XtCallbackProc, XtPointer)’ [-fpermissive] 

我真的不明白這個錯誤,至少我從來沒有見過類似語法「又名空等等等等~~」。

任何人都可以請幫我解決這個編譯錯誤,如果可能的話,請解釋我這個錯誤信息是什麼意思?

這裏是原來的源代碼:

#include <Xm/Xm.h> 
#include <Xm/PushB.h> 

/* Prototype Callback function */ 

void pushed_fn(Widget , XtPointer , 
       XmPushButtonCallbackStruct *); 


main(int argc, char **argv) 

{ Widget top_wid, button; 
    XtAppContext app; 

    top_wid = XtVaAppInitialize(&app, "Push", NULL, 0, 
     &argc, argv, NULL, NULL); 

    button = XmCreatePushButton(top_wid, "Push_me", NULL, 0); 

    /* tell Xt to manage button */ 
       XtManageChild(button); 

       /* attach fn to widget */ 
    XtAddCallback(button, XmNactivateCallback, pushed_fn, NULL); 

    XtRealizeWidget(top_wid); /* display widget hierarchy */ 
    XtAppMainLoop(app); /* enter processing loop */ 

} 

void pushed_fn(Widget w, XtPointer client_data, 
       XmPushButtonCallbackStruct *cbs) 
    { 
    printf("Don't Push Me!!\n"); 
    } 

回答

2

XtAddCallback期待一個XtCallbackProcpushed_fn可能是兼容的,但因爲它直接使用XM類型它不是一個XtCallbackProc。

已經有一段時間,因爲我做了主題,所以我可能是錯的,但解決方案可能是:

void pushed_fn(Widget w, XtPointer client, XtPointer cbsXt) 
{ 
    XmPushButtonCallbackStruct *cbs = (XmPushButtonCallbackStruct*)cbsXt; 
    ... 
} 
+0

謝謝它編得非常好。另外你知道如何調整窗口的大小嗎?它彈出在非常小的窗口中。 –

+0

你綁定了它的寬度和高度嗎? - 這可能是唯一的方法,因爲我沒有看到代碼中的佈局管理器。 – John3136

+0

沒有,也許我必須先爲它谷歌。非常感謝你 –

相關問題