Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"class1::function1": Virtuell funktionens returtyp skiljer sig från och är inte kovariant med "class2::function2"
Anmärkningar
En virtuell funktion och en härledd övergripande funktion har identiska parameterlistor men olika returtyper.
I C++kan en övergripande funktion i en härledd klass inte bara skilja sig efter returtyp från en virtuell funktion i en basklass.
Det finns ett undantag till den här regeln för vissa returtyper. När en härledd klass åsidosätter en offentlig basklass kan den returnera en pekare eller referens till den härledda klassen i stället för en basklasspekare eller referens. Dessa returtyper kallas covariant eftersom de varierar tillsammans med typen. Det här regelundantaget tillåter inte kovarianta typer av referens till pekare eller pekare till pekare.
Ett sätt att lösa felet är att returnera samma typ som basklassen. Sedan konverterar du returvärdet efter att den virtuella funktionen har anropats. En annan är att också ändra parameterlistan, så att medlemsfunktionen i den härledda klassen blir en överbelastning i stället för en åsidosättning.
Examples
Du kan se det här felet om du kompilerar med /clr. Till exempel motsvarar C++ följande C#-deklaration:
Guid[] CheckSources(Guid sourceID, Guid[] carouselIDs);
is
Guid CheckSources(Guid sourceID, Guid carouselIDs[]) [];
I följande exempel genereras C2555:
// C2555.cpp
// compile with: /c
struct X {
virtual void func();
};
struct Y : X {
char func(); // C2555
void func2(); // OK
};
Åtgärda det genom att ändra returtypen Y::func till void.