Partager via


Erreur du compilateur C2676

binaire 'operator' : 'type*' ne définit pas cet opérateur ou une conversion vers un type acceptable pour l’opérateur prédéfini

Notes

Pour utiliser l'opérateur, vous devez le surcharger pour le type spécifié ou définir une conversion vers un type pour lequel l'opérateur est défini.

Exemples

L’exemple suivant génère l’erreur 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 peut également se produire si vous tentez d’effectuer des arithmétiques de pointeur sur le this pointeur d’un type référence.

Le this pointeur est de type handle dans un type référence. Pour plus d’informations, consultez Sémantique du this pointeur.

L’exemple suivant génère l’erreur 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();
}