문제

나는 ncurses를 배우려고 노력하고 있으며 훌륭한 가이드를 읽고 있습니다. 여기, 그러나 예 사용자 포인터 컴파일하지 않습니다. 컴파일하려고 할 때이 오류가 발생합니다.

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*)'

또한 Strlen 및 Calloc으로 컴파일하려면 cstdlib 및 cstring을 추가해야 할 것입니다.

나는 void 포인터에 대해 잘 모르기 때문에 일부는 예제를 수정하는 데 도움이 될 것입니다.

감사

도움이 되었습니까?

해결책

매뉴얼 페이지를 읽는 것 :

#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 ++는 A를 변환 할 때 캐스트가 필요합니다. 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().

다른 팁

C ++ 컴파일러를 사용하고 있으므로 다음을 수행해야합니다.

    set_item_userptr(my_items[i], (void *)func);

그리고 다시,

    p = (void*)item_userptr(cur);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top