error C2440: 'initializing' : cannot convert from 'void (__cdecl *)(void *,void *)' to
-
Hallo, Ich möchte in meinem C++ Projekt folgende C Code nutzen:
void (*func_ptr)(void*, RQB_PTR_TYPE) = rb->_user_func;
und hier einige Deklarationen:
RQB_PTR_TYPE rb;
void(*_user_func)(void*_this, void*_rqb);Aber beim Kompilieren kriege ich Fehler:
error C2440: 'initializing' : cannot convert from 'void (__cdecl *)(void *,void *)' to 'void (__cdecl *)(void *,RQB_PTR_TYPE)'
Kann jemand vielleicht mir sagen, wie ich solche Fehler beheben kann?
Vielen Dank im Voraus!
-
Der Code ist doch Mist.
Du hast einen void-Funktionszeiger mit void* und RQB_PTR_TYPE als Parameter. So einem Zeiger weißt man eine solche Funktion zu. Du weißt dem Zeiger einen anderen Zeiger zu, ist zwar okay, nur, der andere Zeiger hat eine andere Signatur, im Parameter steht void*, void*, damit sind die Zeiger nicht kompatibel.
Wird _user_func überhaupt initialisiert? Wenn nicht ---> undefiniertes Verhalten.
Außerdem ist diese void-Zeigerei extrem wiederlich und typenunsicher. Der Code sollte von grund auf in C++ migriert werden, oder welchen Grund hat die Verwendung des void-Zeigers in deinem Code? Ist er sehr Low-Level?
Komm bloß nicht erst auf Ideen wie das mit static_cast zu ummodeln, das ist kein C++.PS: void *_rqb klingt doch sehr danach, dass das ein Zeiger auf eine Struct namens RQB_TYPE ist, bzw. RQB_PTR_TYPE. Wieso nimmst du dann im Funktionsprototypen nicht gleich diesen Parameter-Typ statt void*?
-
ich weiß dass die code sehr unübersichtlich sind. Ich habe die Code einfach von einem C Projekt genommen, habe nicht die selber geschrieben.
Im C Projekt funktioniert alles problemlos.
Vielleicht in C++ muss ich C Datentypen "casten"???
-
Ja, caste ruhig die void*s rum, dafür sind die da. -.- *ironie* *sarkasmus*
C != C++! In C++ sind void*s nur aus 2 Gründen vorhanden: um low-Level-Funktionen oder Designfehler zu implementieren. In C, was noch mehr lowlevel ist, kann sowas häufiger mal vorkommen, aber nicht in C++.
Ich weiß nicht mal, was der Code macht und ich wette, du auch nicht, sonst hättest du ihn selber geschrieben. Lern am besten erst mal ordentlich C++.
-
func_ptr und user_func haben nicht die gleiche signatur!
Probiers mal so:
void(*_user_func)(void*_this, RQB_PTR_TYPE _rqb);