Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
'function' : impossible de convertir 'this' pointeur de 'type1' en 'type2'
Remarques
Le compilateur n’a pas pu convertir le this pointeur en type1type2.
Cette erreur peut être due à l’appel d’une fonction non membreconst sur un const objet. Résolutions possibles :
Supprimez la
constdéclaration d’objet.Ajouter
constà la fonction membre.
Examples
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];
}