gpt4 book ai didi

linux - 如何使用 Netbeans 编译在 Ubuntu 64 位上实现 Xm 的代码?

转载 作者:太空宇宙 更新时间:2023-11-04 09:44:00 24 4
gpt4 key购买 nike

我只是 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");
}

最佳答案

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

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

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

关于linux - 如何使用 Netbeans 编译在 Ubuntu 64 位上实现 Xm 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18437872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com