Partilhar via


Erro do compilador C2555

'class1::function1': sobrepor tipo de retorno de função virtual difere e não é covariante com 'class2::function2'

Observações

Uma função virtual e uma função de substituição derivada têm listas de parâmetros idênticas, mas tipos de retorno diferentes.

Em C++, uma função de substituição em uma classe derivada não pode diferir apenas pelo tipo de retorno de uma função virtual em uma classe base.

Há uma exceção a essa regra para certos tipos de retorno. Quando uma classe derivada substitui uma classe base pública, ela pode retornar um ponteiro ou referência para a classe derivada em vez de um ponteiro ou referência de classe base. Esses tipos de retorno são chamados de covariantes, porque variam junto com o tipo. Esta exceção de regra não permite tipos covariantes de referência a ponteiro ou ponteiro a ponteiro.

Uma maneira de resolver o erro é retornar o mesmo tipo que a classe base. Em seguida, converta o valor de retorno após a função virtual ter sido chamada. Outra é também alterar a lista de parâmetros, para tornar a função de membro da classe derivada uma sobrecarga em vez de uma substituição.

Examples

Poderá ver este erro se compilar com /clr. Por exemplo, o C++ equivalente à seguinte declaração C#:

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

é

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

O exemplo a seguir gera C2555:

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

Para corrigi-lo, altere o tipo de retorno de Y::func para void.