Delen via


Compilerfout C2662

'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 const uit de objectdeclaratie.

  • Voeg const toe 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];
}