Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
'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.