C --> C++ - Pointer casten?
-
Hi
Hab Probleme ein Beispiel Code für C zu compilieren in C++ (gcc)
Hoffe es kann mir jemand helfen, das gerade zu biegenvoid func(char *name); int main() { //... my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *)); for(i = 0; i < n_choices; ++i) { my_items[i] = new_item(choices[i], choices[i]); /* Set the user pointer */ set_item_userptr(my_items[i], func); //<--------- }error: invalid conversion from ‘void ()(char)’ to ‘void*’
error: initializing argument 2 of ‘int set_item_userptr(ITEM*, void*)’Und hier nochmal:
case 10: /* Enter */ { ITEM *cur; void (*p)(char *); cur = current_item(my_menu); // <--------- p = item_userptr(cur); p((char *)item_name(cur)); pos_menu_cursor(my_menu); break; }error: invalid conversion from ‘void*’ to ‘void ()(char)’
Ist aus dem ncurses HowTo
Wär für Hilfe wirklich dankbar
Grüsseps::sry wenn dasnicht hierher gehört, bitte verschieben
-
Warum compilierst du es denn dann als C++ Programm, anstatt einfach in C, wenn es sowieso ein C Programm ist.
In C++ können keine Funktionspointer implizit in void* gecastet werden, d.h. das mußt du dann explizit machen, also
set_item_userptr(my_items[i], (void *)func);
-
Danke, werds probieren.
Th schrieb:
Warum compilierst du es denn dann als C++ Programm, anstatt einfach in C, wenn es sowieso ein C Programm ist.
Weil ich die ncurses Funktionen in ne Klasse packen und in meinem C++ Programm nutzen möchte.
-
Wenn func(char* name) aus einem C Code (oder einer C-Lib) aufgerufen werden soll, aber in einem C++-Modul liegt, sollte es als
extern "C" void (char *name);deklariert werden, bzw. die Implementation(en) markiert durch:
extern "C" { void func(char* name) { // ... } // möglicherweise weitere... }
-
extern "C" void (char *name);sollte natürlich
extern "C" void func(char *name);sein, sorry.

-
Ahso?
Danke.Aber ich werd mich nun eh noch mal intensiv nach nem C++ Framework umsehen, ncurses ist mir irgendwie zu sehr C. Ich mag die formatierten string Funktionen nicht (printf() etc..) und das Zeigergehampel ist auch nicht so schön.