我正在尝试学习ncurses,而我正在阅读极好的指南here,但user pointers的示例无法编译。我尝试编译时遇到此错误。
menu.cpp: In function 'int main()':
menu.cpp:44: error: invalid conversion from 'void (*)(char*)' to 'void*'
menu.cpp:44: error: initializing argument 2 of 'int set_item_userptr(ITEM*, void*)'
menu.cpp:70: error: invalid conversion from 'void*' to 'void (*)(char*)'
此外,您可能需要添加cstdlib和cstring以便使用strlen和calloc进行编译。
我对void指针知之甚少,所以非常感谢一些帮助修复这个例子。
由于
答案 0 :(得分:2)
您正在使用C ++编译器,因此您需要执行以下操作:
set_item_userptr(my_items[i], (void *)func);
再次,
p = (void*)item_userptr(cur);
答案 1 :(得分:2)
阅读手册页:
#include <menu.h>
int set_item_userptr(ITEM *item, void *userptr);
void *item_userptr(const ITEM *item);
说明
每个菜单项都有一个字段,可用于保存特定于应用程序的数据(即菜单驱动程序代码单独保留)。这些函数获取并设置该字段。
userptr
是您应提供给set_item_userptr()
的特定于用户的数据。如果您不想提供任何数据,则应提供NULL
。看起来您正在使用指向函数的指针调用set_item_userptr()
作为其第二个参数。无法保证您可以将函数指针转换为void *
并且可以在C或C ++中移植(C ++在将void *
转换为任何其他指针类型时需要强制转换)。在不知道你想要做什么的情况下,如果你真的需要传递一个函数指针,你应该将它转换为适当的类型:
int ret = set_item_userptr(item, reinterpret_cast<void *>(ptr));
void (*pf)(char*);
pf = reinterpret_cast<void (*)(char *)>(item_userptr(item));
但不保证能够正常工作。你应该做一些其他事情,比如让struct
包含函数指针,并将指针传递给struct
到set_item_userptr()
。