我正在尝试学习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进行编译。
我对空指针了解不多,所以如果能帮助修复这个例子,我会非常感激。
谢谢
发布于 2010-02-09 16:34:21
阅读手册页:
#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(),并将指向函数的指针作为其第二个参数。不能保证您可以在C或C++中将函数指针转换为void *或可移植回来(在将void *转换为任何其他指针类型时,C++需要强制转换)。在不知道要做什么的情况下,如果确实需要传递函数指针,则应将其强制转换为适当的类型:
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()。
发布于 2010-02-09 16:12:53
您使用的是C++编译器,因此需要执行以下操作:
set_item_userptr(my_items[i], (void *)func);再一次,
p = (void*)item_userptr(cur);https://stackoverflow.com/questions/2227594
复制相似问题