Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
'class1::function1': Überschreiben des Rückgabetyps der virtuellen Funktion unterscheidet sich und ist nicht kovariant von 'class2::function2'
Hinweise
Eine virtuelle Funktion und eine abgeleitete Außerkraftsetzungsfunktion weisen identische Parameterlisten, aber unterschiedliche Rückgabetypen auf.
In C++ kann eine Außerkraftsetzungsfunktion in einer abgeleiteten Klasse nicht nur durch Rückgabetyp von einer virtuellen Funktion in einer Basisklasse abweichen.
Für bestimmte Rückgabetypen gibt es eine Ausnahme für diese Regel. Wenn eine abgeleitete Klasse eine öffentliche Basisklasse außer Kraft setzt, kann ein Zeiger oder Verweis auf die abgeleitete Klasse anstelle eines Basisklassenzeigers oder -verweises zurückgegeben werden. Diese Rückgabetypen werden als kovariant bezeichnet, da sie zusammen mit dem Typ variieren. Diese Regel exception doesn't allow covariant reference-to-pointer or pointer-to-pointer types.
Eine Möglichkeit zum Beheben des Fehlers besteht darin, denselben Typ wie die Basisklasse zurückzugeben. Wandeln Sie dann den Rückgabewert um, nachdem die virtuelle Funktion aufgerufen wurde. Eine weitere besteht darin, die Parameterliste zu ändern, damit die abgeleitete Klassenmememmfunktion anstelle einer Außerkraftsetzung eine Überladung wird.
Beispiele
Dieser Fehler wird möglicherweise angezeigt, wenn Sie kompilieren./clr Beispielsweise entspricht die C++-Deklaration der folgenden C#-Deklaration:
Guid[] CheckSources(Guid sourceID, Guid[] carouselIDs);
stimmt
Guid CheckSources(Guid sourceID, Guid carouselIDs[]) [];
Im folgenden Beispiel wird C2555 generiert:
// C2555.cpp
// compile with: /c
struct X {
virtual void func();
};
struct Y : X {
char func(); // C2555
void func2(); // OK
};
Um dies zu beheben, ändern Sie den Rückgabetyp in Y::funcvoid.