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];
}