Konvertierungsorgien

anitaki

Grünschnabel
Hallo liebe Kollegen,

ich beginne gerade mit C++

ansich eine feine Sache, lediglich die dauernden Meldungen welcher Datentyp zu welchem Datentyp nicht konvertierbar ist nervt gewaltig.

Nun meine Frage: Gibt es vielleicht irgendwo eine Tabelle mit der man auf einem Blick erkennt ob und wie zu konvertieren ist. Gibt es dazu vielleicht gar eine Sammlung wo diese Dinge einheitlich durch Funktionen geregelt sind (vonTyp -> aufTyp und man nicht ständig sich um diese Konvertiererei kümmern muß.
 
Hallo bei Zahlen kannst du doch z.b immer so vorgehen! Bei String char oder diesen in Zahlenwerete ist es dann nicht ganz so einfach!

Code:
double lfZahl;
lfZahl = 5.32;
int iZahl = (int) lfZahl; //damit verlierst du aber die Nachkommastellen

Für die andern Datentypen geht das genauso!

Bei andern Typcast such mal hier im formum nach int to char oder ähnlichem.
 
danke, das mit dem (datentyp) davor setzen hab ich schon verstanden nur wie du auch bestätigst funktioniert das bei den string datentypen nicht so einfach.

ich arbeite mit cstring, std::string, char und ständig geht etwas nicht.

ist das vielleicht unter c# schon verbessert worden?
 
Hi.
ansich eine feine Sache, lediglich die dauernden Meldungen welcher Datentyp zu welchem Datentyp nicht konvertierbar ist nervt gewaltig.

Nun meine Frage: Gibt es vielleicht irgendwo eine Tabelle mit der man auf einem Blick erkennt ob und wie zu konvertieren ist.
Nicht das ich wüßte.

Aber gründsätzlich kann erstmal jeder Zahlentyp in andere Zahlentypen konvertiert werden. Die Richtung ist dabei festgelegt vom Zahlentyp mit geringem Zahlenintervall zu Datentypen mit höheren Intervall, bzw. von geringer Genauigkeit zu höherer Genauigkeit:

char -> short -> int -> long -> long long
float -> double

Diese Konvertierungen werden vom Kompiler implizit durchgeführt (darum mußt du dich also gar nicht kümmern).

Um etwas in einen String zu "konvertieren" kann man bequem die stringstreams verwenden.
Gibt es dazu vielleicht gar eine Sammlung wo diese Dinge einheitlich durch Funktionen geregelt sind (vonTyp -> aufTyp und man nicht ständig sich um diese Konvertiererei kümmern muß.
Mit diesen Funktionen müßtest du dich doch auch nur um die Konvertierung kümmern...

Statt Funktionen gibt es Operatoren:

static_cast<TYP>(var);
const_cast<TYP>(var);
dynamic_cast<TYP>(var);
reinterpret_cast<TYP>(var);

Den static_cast braucht man am häufigsten.

Vielleicht solltest du etwas konkreter schreiben welche Konvertierungen dir solche Probleme bereiten.

Gruß
 
klingt gut,

also probier ich mal einen CString auf char * weil eine Funtkion den Parameter mit char * erwartet und ich den Wert in einer CString habe.

error C2440: 'static_cast' : cannot convert from 'class CString' to 'char *'
 
klingt gut,

also probier ich mal einen CString auf char * weil eine Funtkion den Parameter mit char * erwartet und ich den Wert in einer CString habe.
Du solltest dir mal die Klasse CString genauer anschauen. Da gibt es bestimmt eine Methode mit der du einen char* bekommen kannst. Z.B. GetBuffer() ? Wenn die Funktion einen "const char*" akzeptiert, kannst du auch den (LPCSTR) Cast verwenden.
error C2440: 'static_cast' : cannot convert from 'class CString' to 'char *'
Bei benutzerdefinierten Typen funktioniert das natürlich nur, wenn es einen entsprechenden Konvertierungsoperator von der Klasse gibt.

Gruß
 
danke, das mit dem (datentyp) davor setzen hab ich schon verstanden nur wie du auch bestätigst funktioniert das bei den string datentypen nicht so einfach.

ich arbeite mit cstring, std::string, char und ständig geht etwas nicht.
Kannst du dich nicht für eine Klasse entscheiden?
ist das vielleicht unter c# schon verbessert worden?
C# hat nicht viel mit C/C++ zu tun. Im .NET Framework gibt es andere vordefinierte Typen und da sieht es anders aus als in C++.

Gruß
 
Zurück