Question

Je suis en train d'apprendre ncurses, et je lis le guide formidable ici , mais l'exemple pointeurs de l'utilisateur ne compiler. Je reçois cette erreur lorsque je tente de compiler.

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

En outre, vous avez probablement besoin d'ajouter cstdlib et cstring pour que compiler avec strlen et calloc.

Je ne sais pas grand-chose au sujet des pointeurs vides, donc une aide fixer l'exemple serait très apprécié.

Merci

Était-ce utile?

La solution

À la lecture de la page de manuel:

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

DESCRIPTION

     

Chaque élément de menu a un champ qui peut être utilisé pour contenir des données spécifiques à l'application (qui est, le code-pilote de menu laisse seul). Ces fonctions get et set ce champ.

userptr est des données spécifiques à l'utilisateur que vous devez fournir à set_item_userptr(). Si vous ne voulez pas fournir des données, vous devez fournir NULL. On dirait que vous appelez set_item_userptr() avec un pointeur vers une fonction comme second argument. Il est pas garanti que vous pouvez convertir une fonction pointeur vers void * et le dos portably, que ce soit en C ou en C ++ (C ++ nécessite une distribution lors de la conversion d'un void * à tout autre type de pointeur). Sans savoir ce que vous essayez de faire, si vous avez vraiment besoin de passer un pointeur de fonction, vous devez jeter dans le type approprié:

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

mais il est pas garanti. Vous devriez faire quelque chose d'autre, comme avoir un struct qui contient le pointeur de fonction, et le passage d'un pointeur vers le struct à set_item_userptr().

Autres conseils

Vous utilisez un compilateur C ++, de sorte que vous devez faire:

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

et encore,

    p = (void*)item_userptr(cur);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top