Partager via


Erreur du compilateur C2662

'function' : impossible de convertir 'this' pointeur de 'type1' en 'type2'

Le compilateur n’a pas pu convertir le this pointeur en type1 type2.

Cette erreur peut être due à l’appel d’une fonction non membreconst sur un const objet. Résolutions possibles :

  • Supprimez la const déclaration d’objet.

  • Ajouter const à la fonction membre.

L’exemple suivant génère l’erreur C2662 :

// C2662.cpp
class C {
public:
   void func1();
   void func2() const{}
} const c;

int main() {
   c.func1();   // C2662
   c.func2();   // OK
}

Lors de la compilation avec /clr, vous ne pouvez pas appeler une fonction sur un const type managé ou volatile qualifié. Vous ne pouvez pas déclarer une fonction membre const d’une classe managée. Vous ne pouvez donc pas appeler des méthodes sur des objets managés const.

// C2662_b.cpp
// compile with: /c /clr
ref struct M {
   property M^ Type {
      M^ get() { return this; }
   }

   void operator=(const M %m) {
      M ^ prop = m.Type;   // C2662
   }
};

ref struct N {
   property N^ Type {
      N^ get() { return this; }
   }

   void operator=(N % n) {
      N ^ prop = n.Type;   // OK
   }
};

L’exemple suivant génère l’erreur C2662 :

// C2662_c.cpp
// compile with: /c
// C2662 expected
typedef int ISXVD;
typedef unsigned char BYTE;

class LXBASE {
protected:
    BYTE *m_rgb;
};

class LXISXVD:LXBASE {
public:
   // Delete the following line to resolve.
   ISXVD *PMin() { return (ISXVD *)m_rgb; }

   ISXVD *PMin2() const { return (ISXVD *)m_rgb; };   // OK
};

void F(const LXISXVD *plxisxvd, int iDim) {
   ISXVD isxvd;
   // Delete the following line to resolve.
   isxvd = plxisxvd->PMin()[iDim];

   isxvd = plxisxvd->PMin2()[iDim];
}