Sdílet prostřednictvím


Chyba kompilátoru C2678

binary 'operator' : no operator defined which takes a left-hand operand of type 'type' (or there is no acceptable conversion)

Poznámky

Chcete-li operátor použít, je třeba jej přetížit pro daný typ nebo definovat převod na typ, pro který je operátor definován.

C2678 může nastat, když je levý operand kvalifikovaný, ale operátor je definován tak, aby přebíjel argument non-const.

Příklady

Následující příklad vygeneruje C2678 a ukazuje, jak ho opravit:

// 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 může dojít také v případě, že před voláním členské funkce nepřipnete nativního člena.

Následující příklad vygeneruje C2678 a ukazuje, jak jej opravit.

// 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;
};