Udostępnij za pomocą


Błąd kompilatora C2678

binarny "operator": nie zdefiniowano operatora, który przyjmuje operand po lewej stronie typu "type" (lub nie ma dopuszczalnej konwersji)

Uwagi

Aby użyć operatora, musisz przeciążyć go dla określonego typu lub zdefiniować konwersję na typ, dla którego zdefiniowano operator.

C2678 może wystąpić, gdy operand po lewej stronie jest kwalifikowany const, ale operator jest zdefiniowany do podjęcia argumentu innego niż const.

Przykłady

Poniższy przykład generuje kod C2678 i pokazuje, jak go naprawić:

// C2678a.cpp
// Compile by using: cl /EHsc /W4 C2678a.cpp
struct Combo {
   int number;
   char letter;
};

inline Combo& operator+=(Combo& lhs, int rhs) {
   lhs.number += rhs;
   return lhs;
}

int main() {
   Combo const combo1{ 42, 'X' };
   Combo combo2{ 13, 'Z' };

   combo1 += 6; // C2678
   combo2 += 9; // OK - operator+= matches non-const Combo
}

C2678 może również wystąpić, jeśli nie przypniesz natywnego elementu członkowskiego przed wywołaniem funkcji składowej.

Poniższy przykład generuje kod C2678 i pokazuje, jak go naprawić.

// C2678.cpp
// compile with: /clr /c
struct S { int _a; };

ref class C {
public:
   void M( S param ) {
      test = param;   // C2678

      // OK
      pin_ptr<S> ptest = &test;
      *ptest = param;
   }
   S test;
};