Pergunta

Estou tentando aprender Ncurses e estou lendo o ótimo guia aqui, mas o exemplo em Ponteiros de usuário não compila. Recebo esse erro quando tento compilar.

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

Além disso, você provavelmente precisa adicionar CSTDLIB e CSTRING para que isso compile com Strlen e Calloc.

Não sei muito sobre os indicadores vazios, então alguns ajudam a consertar o exemplo seria muito apreciado.

Obrigado

Foi útil?

Solução

Ao ler a página manual:

#include <menu.h>
int set_item_userptr(ITEM *item, void *userptr);
void *item_userptr(const ITEM *item);

DESCRIÇÃO

Cada item de menu possui um campo que pode ser usado para conter dados específicos do aplicativo (ou seja, o código de driver de menu deixa-o sozinho). Essas funções obtêm e definem esse campo.

userptr são dados específicos do usuário que você deve fornecer para set_item_userptr(). Se você não quiser fornecer nenhum dado, deve fornecer NULL. Parece que você está ligando set_item_userptr() com um ponteiro para uma função como seu segundo argumento. Não é garantido que você pode converter um ponteiro de função para void * e de volta portavelmente, em C ou em C ++ (C ++ requer um elenco ao converter um void * para qualquer outro tipo de ponteiro). Sem saber o que você está tentando fazer, se você realmente precisar passar por um ponteiro de função, você deve lançá -lo para o tipo apropriado:

int ret = set_item_userptr(item, reinterpret_cast<void *>(ptr));
void (*pf)(char*);
pf = reinterpret_cast<void (*)(char *)>(item_userptr(item));

Mas não é garantido trabalhar. Você deve fazer outra coisa, como ter um struct que contém o ponteiro da função e passando um ponteiro para o struct para set_item_userptr().

Outras dicas

Você está usando um compilador C ++, então precisará fazer:

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

e de novo,

    p = (void*)item_userptr(cur);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top