Compartir a través de


Error del compilador C2676

operator” : “type*” binario no define este operador o una conversión a un tipo aceptable para el operador predefinido

Comentarios

Para usar este operador, debe sobrecargarlo para el tipo especificado o definir una conversión a un tipo para el que esté definido el operador.

Ejemplos

El ejemplo siguiente genera el error 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)
}

También se puede producir el error C2676 si intenta utilizar aritmética de punteros en el puntero this de un tipo de referencia.

El puntero this es del identificador de tipo de un tipo de referencia. Para obtener más información, consulte Semántica del puntero this.

El ejemplo siguiente genera el error 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();
}