Compartilhar via


Erro do Compilador C2678

"operator" binário: nenhum operador definido que receba um operando no lado esquerdo do tipo "type" (ou não há nenhuma conversão aceitável)

Para usar o operador, você precisa sobrecarregá-lo para o tipo especificado ou definir uma conversão para um tipo para o qual o operador é definido.

O erro C2678 pode ocorrer quando o operando no lado esquerdo for qualificado como const, mas o operador estiver definido para receber um argumento não const.

Exemplos

A amostra a seguir gera o erro C2678 e mostra como corrigi-lo:

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

O erro C2678 também pode ocorrer se você não fixar um membro nativo antes de chamar uma função membro nele.

A amostra a seguir gera o erro C2678 e mostra como corrigi-lo.

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