Megosztás a következőn keresztül:


C2555-ös fordítási hiba

"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.