【问题标题】:How to compile this code implementing Xm on Ubuntu 64 bit using Netbeans?如何使用 Netbeans 在 Ubuntu 64 位上编译实现 Xm 的代码?
【发布时间】:2013-08-26 06:25:44
【问题描述】:

我只是 X-Windows 的新手,正在尝试编写只在 Linux 上调用简单 MessageBox 的代码,例如 Window。

我在 Ubuntu 12.04LTS 64 位并安装了 Netbeans 完整版。 我在这个项目中包含了“/usr/include/Xm”,对于库,我包含了“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] 

我真的不明白这个错误,至少我从未见过像“aka void blah blah~~”这样的语法。

谁能帮我解决这个编译错误,如果可能的话,请解释一下这个错误信息是什么意思?

这里是原始源代码:

#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");
  }

【问题讨论】:

    标签: linux ubuntu x11 motif


    【解决方案1】:

    XtAddCallback 期望 XtCallbackProc 您的 pushed_fn 可能兼容,但它不是 XtCallbackProc,因为它直接使用 Xm 类型。

    自从我完成 Motif 以来已经有一段时间了,所以我可能是错的,但解决方案可能是:

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

    【讨论】:

    • 谢谢它编译得很好。另外你知道如何调整它的窗口大小吗?它会在非常小的窗口中弹出。
    • 你设置它的宽度和高度了吗? - 这可能是唯一的方法,因为我在您的代码中没有看到任何布局管理器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多