次の方法で共有


コンパイラ エラー C2662

'function': 'this' ポインターを 'type1' から 'type2' に変換できません

コンパイラでは、this ポインターを type1 から type2 に変換する必要があります。

このエラーは、const オブジェクトで非 const メンバー関数を呼び出した場合に発生する可能性があります。 考えられる解決策:

  • オブジェクト宣言から const を削除します。

  • メンバー関数に const を追加します。

次の例では C2662 エラーが生成されます。

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

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

/clr を使用してコンパイルする場合は、修飾されたマネージド型 const または volatile で関数を呼び出す必要があります。 マネージド クラスの const メンバー関数を宣言することはできません。そのため、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
   }
};

次の例では 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];
}