次の方法で共有


コンパイラ エラー C2676

バイナリ 'operator' : 'type*' は、この演算子または定義済みの演算子に許容される型への変換を定義しません

解説

この演算子を使うには、型を指定してこの演算子をオーバーロードするか、この演算子が定義された型への変換を定義する必要があります。

次の例では C2676 が生成されます。

// C2676.cpp
// C2676 expected
struct C {
   C();
} c;

struct D {
   D();
   D operator >>( C& ){return * new D;}
   D operator <<( C& ){return * new D;}
} d;

struct E {
   // operator int();
};

int main() {
   d >> c;
   d << c;
   E e1, e2;
   e1 == e2;   // uncomment operator int in class E, then
               // it is OK even though neither E::operator==(E) nor
               // operator==(E, E) defined. Uses the conversion to int
               // and then the builtin-operator==(int, int)
}

C2676 は、参照型の this ポインターでポインター演算を試行した場合にも発生することがあります。

this ポインターは、参照型の型ハンドルのポインターです。 詳細については、「this ポインターのSemanticsを参照してください。

次の例では C2676 が生成されます。

// C2676_a.cpp
// compile with: /clr
using namespace System;

ref struct A {
   property Double default[Double] {
      Double get(Double data) {
         return data*data;
      }
   }

   A() {
      Console::WriteLine("{0}", this + 3.3);   // C2676
      Console::WriteLine("{0}", this[3.3]);   // OK
   }
};

int main() {
   A ^ mya = gcnew A();
}