Kompilatorfel C2678

binär 'operator': ingen operatör definierad som tar en vänsteroperatör av typen 'typ' (eller så finns det ingen acceptabel konvertering)

Anmärkningar

Om du vill använda operatorn måste du överbelasta den för den angivna typen eller definiera en konvertering till en typ som operatorn har definierats för.

C2678 kan inträffa när den vänstra operanden är const-kvalificerad men operatorn definieras för att ta ett icke-const-argument.

Exempel

Följande exempel genererar C2678 och visar hur du åtgärdar det:

// 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 kan också inträffa om du inte fäster en inhemsk medlem innan du anropar en medlemsfunktion på den.

I följande exempel genereras C2678 och hur du åtgärdar det.

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