Frage

Ich versuche ncurses zu lernen, und ich lese die hervorragende Führung hier , aber das Beispiel unter Benutzer Zeiger nicht kompilieren. Ich bekomme diese Fehlermeldung, wenn ich versuche zu kompilieren.

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

Außerdem müssen Sie wahrscheinlich cstdlib hinzufügen und cstring für die mit strlen und calloc kompilieren.

Ich weiß nicht viel über void-Zeiger, so dass einige Hilfe das Beispiel Festsetzung würde sehr geschätzt werden.

Danke

War es hilfreich?

Lösung

Von der manuellen Seite zu lesen:

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

Beschreibung

     

Jeder Menüpunkt hat ein Feld, das verwendet werden kann, anwendungsspezifische Daten zu halten (das heißt, der Menü-Treiber-Code läßt sie allein). Diese Funktionen erhalten und dieses Feld gesetzt.

userptr ist benutzerspezifischen Daten, die Sie liefern sollten set_item_userptr(). Wenn Sie keine Daten liefern wollen, sollten Sie NULL liefern. Sieht aus wie Sie set_item_userptr() mit einem Zeiger auf eine Funktion als zweites Argument nennen. Es ist nicht garantiert, dass Sie einen Funktionszeiger umwandeln können void * und zurück portably, entweder in C oder in C ++ (C ++ erfordert eine Besetzung, wenn ein void * zu jedem anderen Zeigertyp Umwandlung). Ohne zu wissen, was Sie zu tun versuchen, wenn Sie wirklich einen Funktionszeiger übergeben müssen, sollten Sie es in dem entsprechenden Typ werfen:

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

, aber es ist nicht garantiert. Sie sollten etwas anderes tun, wie eine struct aufweist, die den Funktionszeiger enthält, und einen Zeiger auf die struct zu set_item_userptr() vorbei.

Andere Tipps

Sie verwenden einen C ++ Compiler, so was Sie tun müssen:

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

wieder

    p = (void*)item_userptr(cur);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top