首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ncurses用户指针

Ncurses用户指针
EN

Stack Overflow用户
提问于 2010-02-09 16:04:27
回答 2查看 1.3K关注 0票数 0

我正在尝试学习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进行编译。

我对空指针了解不多,所以如果能帮助修复这个例子,我会非常感激。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-09 16:34:21

阅读手册页:

代码语言:javascript
复制
#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++需要强制转换)。在不知道要做什么的情况下,如果确实需要传递函数指针,则应将其强制转换为适当的类型:

代码语言:javascript
复制
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()

票数 2
EN

Stack Overflow用户

发布于 2010-02-09 16:12:53

您使用的是C++编译器,因此需要执行以下操作:

代码语言:javascript
复制
    set_item_userptr(my_items[i], (void *)func);

再一次,

代码语言:javascript
复制
    p = (void*)item_userptr(cur);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2227594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档