Partilhar via


Erro do compilador C2392

'method1' : os tipos de retornos covariantes não são suportados em managed ou WinRTtypes, caso contrário, 'method2' seria substituído

Observações

Os tipos de retorno covariantes não são permitidos para funções de membro do Tempo de Execução do Windows ou ao compilar com a opção /clr (Common Language Runtime Compilation).

Example

O exemplo a seguir gera C2392 e mostra como corrigi-lo.

// C2392.cpp
// compile with: /clr
public ref struct B {
public:
   int i;
};

public ref struct D: public B{};

public ref struct B1 {
public:
   virtual B^ mf() {
      B^ pB = gcnew B;
      pB->i = 11;
      return pB;
   }
};

public ref struct D1: public B1 {
public:
   virtual D^ mf() override {  // C2392
   // try the following line instead
   // virtual B^ mf() override {
   // return type D^ is covariant with B^, not allowed with CLR types
      D^ pD = gcnew D;
      pD->i = 12;
      return pD;
   }
};

int main() {
   B1^ pB1 = gcnew D1;
   B^ pB = pB1->mf();
   D^ pD = dynamic_cast<D^>(pB);
}