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();
}