Sdílet prostřednictvím


Chyba kompilátoru C2555

'class1::function1': Přepsání návratového typu virtuální funkce se liší a není kovariantní od třídy 2::function2.

Poznámky

Virtuální funkce a odvozená přepisovací funkce mají identické seznamy parametrů, ale různé návratové typy.

V jazyce C++ se přepisovací funkce v odvozené třídě nemůže lišit pouze návratovým typem z virtuální funkce v základní třídě.

U některých návratových typů existuje výjimka tohoto pravidla. Pokud odvozená třída přepíše veřejnou základní třídu, může vrátit ukazatel nebo odkaz na odvozenou třídu místo ukazatele nebo odkazu základní třídy. Tyto návratové typy se nazývají kovariantní, protože se liší společně s typem. Tato výjimka pravidla neumožňuje kovariantní typy odkazů na ukazatel nebo ukazatel na ukazatel.

Jedním ze způsobů, jak chybu vyřešit, je vrátit stejný typ jako základní třída. Potom přetypujte návratovou hodnotu po zavolání virtuální funkce. Další možností je změnit seznam parametrů, aby odvozená členová funkce třídy byla přetížení místo přepsání.

Příklady

Tato chyba se může zobrazit při kompilaci s /clr. Například ekvivalent jazyka C++ k následující deklaraci jazyka C#:

Guid[] CheckSources(Guid sourceID, Guid[] carouselIDs);

is

Guid CheckSources(Guid sourceID, Guid carouselIDs[]) [];

Následující příklad vygeneruje C2555:

// C2555.cpp
// compile with: /c
struct X {
   virtual void func();
};
struct Y : X {
   char func();  // C2555
   void func2();   // OK
};

Chcete-li jej opravit, změňte návratový Y::func typ na void.