Casten vermeiden
-
Hallo.
Ich habe hier im Forum gelernt, dass ich das Casten vermeiden soll.
Ich habe in C eine DLL geschrieben und möchte diese nun in C++ weiter schreiben,
da ich Funktionen in Strukturen nutzen möchte.Ich habe also das File von .c in .cpp umbenannt.
Jetzt darf ich zwar Funktionen in Strukturen definieren, aber
Visual Studio 2015 spuckt mit für jedes malloc eine
Fehlermeldung aus, dass er void nicht in Variable
umwandeln kann.Ich könnte jetzt natürlich alle 82 Fehler durch
Casten beseitigen, aber vllt. ist es ja nur eine Einstellung
von VS.Weiß jemand mehr?
Grüsse.
-
In C funktioniert der Cast von
void*zum entsprechenden Typ implizit, während es in C++ explizit angegeben werden muss (mittels Cast) - allerdings könntest dunewunddeleteverwenden, dennnewgibt gleich einen Pointer des richtigen Typs zurück; noch besser wäre allerdings, wenn dustd::make_unique<..>(..)verwendest, um Fehler in der Handhabung des Speichers zu vermeiden.
-
Aus C wird kein C++, indem man die Dateiendung ändert. Du wirst wohl malloc/free durch passende new/delete Aufrufe ersetzen müssen. Soweit möglich solltest du besitzende nackte Pointer durch Container oder Smartpointer ersetzen.
-
Bezüglich new/make_unique/smart_pointer: Vielleicht erst einmal fragen, warum das C-Programm malloc benutzt? Zu 99.9% ist das nämlich dazu da, um damit eine der üblichen dynamischen Datenstrukturen zu implementieren, da es in C keine Standardbibliothek für Datencontainer gibt. Das heißt in der überwiegenden Zahl der Fälle ist der Threadersteller gewiss besser bedient mit einem STL-Container (höchstwahrscheinlich Vector).