E2031 Typumwandlung von 'typ1' nach 'typ2' nicht zulässig (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Compiler-Fehler und -Warnungen (C++) - Index

Eine Typumwandlung von 'typ1' nach 'typ2' ist nicht zulässig.

Sie können in C++ einen Zeiger auf eine Elementfunktion nicht in einen Zeiger auf eine normale Funktion umwandeln.

Ein Beispiel:



 class A {
 public:
    int myex();
 };
 typedef int (*fp)();
 test()
 {
    fp myfp - (fp) &A::myex; // Fehler
    return myfp();
 }



Eine Elementfunktion führt einen versteckten Parameter mit sich, den this-Zeiger, der sich anders als ein normaler Funktionszeiger verhält.

Eine statische Elementfunktion (d. h. diese Funktion besitzt keinen this-Zeiger) verhält sich wie eine normale Funktion, eine Umwandlung kann stattfinden.

Ein Beispiel:



 class A {
 public:
    static int myex();
 };
 typedef int (*fp)();
 test()
 {
    fp myfp - (fp) &A::myex; // ok
    return myfp();
 }



Jedoch können statische Elementfunktionen auch nur auf statische Datenelemente der Klasse zugreifen.

In C

  • Ein Zeiger kann in einen anderen Zeiger oder einen Integerwert umgewandelt werden.
  • Ein Integer kann in jeden Integer-, Fließkomma- oder Zeigertyp umgewandelt werden.
  • Ein Fließkommatyp kann in einen Fließkomma- oder einen Integertyp umgewandelt werden.

Strukturen und Arrays können nicht ineinander umgewandelt werden.

Der Datentyp void kann normalerweise auch nicht umgewandelt werden.

In C++

In C++ werden vom Anwender definierte Umwandlungsvorschriften und Konstruktoren überprüft. Falls keine vorkommen, gelten die oben genannten Regeln, außer für Zeiger auf Klassenelemente.

Bei Integerwerten darf nur die Konstante Null in den Zeiger auf ein Element umgewandelt werden.

Ein Elementzeiger kann in einen Integertyp oder in einen ähnlichen Elementzeiger umgewandelt werden.

Ein ähnlicher Zeiger bedeutet Zeiger auf ein Datenelement (oder eine Funktion), falls der ursprüngliche Zeiger dorthin zeigt. Die qualifizierende Klasse des umzuwandelnden Typs muss die gleiche Klasse wie die ursprüngliche Klasse oder eine Basisklasse von ihr sein.