Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
'function': kan de aanwijzer 'this' niet converteren van 'type1' naar 'type2'
Opmerkingen
De compiler kon de this aanwijzer niet van type1 naar type2 converteren.
Deze fout kan worden veroorzaakt door het aanroepen van een niet-constlidfunctie op een const object. Mogelijke oplossingen:
Verwijder de
constuit de objectdeclaratie.Voeg
consttoe aan lidfunctie.
Voorbeelden
In het volgende voorbeeld wordt C2662 gegenereerd:
// C2662.cpp
class C {
public:
void func1();
void func2() const{}
} const c;
int main() {
c.func1(); // C2662
c.func2(); // OK
}
Bij het compileren met /clr kunt u geen functie aanroepen voor een const of volatile gekwalificeerd beheerd type. U kunt geen const-lidfunctie van een beheerde klasse declareren, dus u kunt geen methoden aanroepen voor door const beheerde objecten.
// 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
}
};
In het volgende voorbeeld wordt C2662 gegenereerd:
// 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];
}