Ich habe eine alte C++ - DLL ausgegraben, und ich möchte es in einem meiner Projekte, in VS2015.Ausgabe der void pointer Funktion
Das Problem ist, es kompiliert nicht. Ich habe mich mit einem Typen im Team in Verbindung gesetzt, der den Code überhaupt erstellt hat, und er ist überzeugt, dass genau der gleiche Code mit VS2010 kompiliert wurde.
Ich habe einen Fehler in einer ansonsten sehr einfachen Funktion:
Ausschnitt des Kopfes:
/*
Data input
*/
istream* input; //Source of data
long inputpos; // Current position in the data stream
Und der Code selbst:
// Helper function to increment a counter while reading a character
void* Calculator::inputstream_get(char& ch)
{
++inputpos;
return input->get(ch);
}
Am Ende bekomme ich einen Fehler C2440:
'return': cannot convert from 'std::basic_istream<char,std::char_traits<char>>' to 'void *'
Es ist mein Verständnis (ich bin kein C++ - Experte, den ich sagen muss ...), dass void pointers jede Art von Daten darstellen könnte, irre ich mich?
Gibt es eine Möglichkeit, meinen istream in einen void pointer zu "werfen"?
Vielen Dank für Ihre Hilfe
'void *' kann jeden Typ von Zeiger darstellen, nicht nur irgendeinen Typ von Punkt. 'std :: basic_istream>' ist kein Zeigertyp und kann daher nicht in 'void *' umgewandelt werden. Ein 'std :: basic_istream > *' könnte jedoch sein. –
Kevin
_Ich habe mich mit einem Mann im Team in Verbindung gesetzt, der den Code erstellt hat, und er ist überzeugt, dass genau der gleiche Code mit VS2010 kompiliert wurde. _ Die Aussage deines Typen ist korrekt - ** ** kompiliert mit VS2010. –
Ich bekomme von all Ihren Kommentaren, dass dies nicht "richtiger" Code ist (was VS2015 betrifft). Warum hat es mit VS2010 kompiliert? Hat sich der Standard geändert? Vielen Dank für Ihre Hilfe – Maxime