Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
"class1::function1": a virtuális függvény visszatérési típusának felülbírálása eltér, és nem kovariáns a "class2::function2" osztálytól
Megjegyzések
A virtuális függvények és a származtatott felülíró függvények azonos paraméterlistákat, de különböző visszatérési típusokat használnak.
A C++-ban a származtatott osztály felülíró függvényei nem térhetnek el csak az alaposztályban lévő virtuális függvény visszatérési típusától.
Bizonyos visszatérési típusok esetében kivételt képez ez a szabály. Ha egy származtatott osztály felülbírál egy nyilvános alaposztályt, akkor ahelyett, hogy az alaposztály mutatóját vagy hivatkozását adná vissza, visszaadhat egy mutatót vagy hivatkozást magára a származtatott osztályra. Ezeket a visszatérési típusokat kovariantnak nevezzük, mivel a típussal együtt változnak. Ez a szabálykivétel nem teszi lehetővé a kovariáns hivatkozás-mutatóra vagy mutatóról mutatóra típusok használatát.
A hiba megoldásának egyik módja, ha ugyanazt a típust adja vissza, mint az alaposztály. Ezután adja meg a visszatérési értéket a virtuális függvény meghívása után. Egy másik lehetőség a paraméterlista módosítása, hogy a származtatott osztályban lévő függvény túlterhelésként viselkedjen a felülírás helyett.
Példák
Ez a hiba akkor jelenhet meg, ha lefordítja a következőt /clr: . Például a C++ egyenértékű a következő C#-deklarációval:
Guid[] CheckSources(Guid sourceID, Guid[] carouselIDs);
is
Guid CheckSources(Guid sourceID, Guid carouselIDs[]) [];
A következő példa C2555-öt hoz létre:
// C2555.cpp
// compile with: /c
struct X {
virtual void func();
};
struct Y : X {
char func(); // C2555
void func2(); // OK
};
A javításhoz módosítsa a visszatérési típust az Y::func-ról void-ra.