Ncurses用户指针

时间:2010-02-09 08:04:27

标签: c++ ncurses void-pointers

我正在尝试学习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指针知之甚少,所以非常感谢一些帮助修复这个例子。

由于

2 个答案:

答案 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包含函数指针,并将指针传递给structset_item_userptr()