Compilerwarnung (Stufe 4) C4512

'Klasse': Zuweisungsoperator konnte nicht generiert werden

Der Compiler kann für die angegebene Klasse keinen Zuweisungsoperator erzeugen. Es wurde kein Zuweisungsoperator erstellt.

Diese Warnung kann durch einen Zuweisungsoperator für die Basisklasse verursacht werden, auf den von der abgeleiteten Klasse nicht zugegriffen werden kann.

Sie vermeiden diese Warnung, indem Sie einen benutzerdefinierten Zuweisungsoperator für die Klasse angeben.

Darüber hinaus generiert der Compiler eine Zuweisungsoperatorfunktion für eine Klasse, in der keine solche Funktion definiert wird. Dieser Zuweisungsoperator fungiert als memberspezifische Kopie der Datenmember eines Objekts. Da Datenelemente vom Typ const nach der Initialisierung nicht geändert werden können, funktioniert der standardmäßige Zuweisungsoperator nicht, wenn die Klasse ein const-Element enthält. Ein anderer Grund für die C4512-Warnung ist eine Deklaration eines nicht statischen Datenmembers des Referenztyps.

Sie haben drei Möglichkeiten, die Warnung C4512 für Ihren Code zu vermeiden:

  • Definieren Sie explizit einen Zuweisungsoperator für die Klasse.

  • Entfernen Sie const oder den Zuweisungsoperator aus dem Datenelement in der Klasse.

  • Verwenden Sie die #Pragma-Anweisung warning, um diese Warnung zu unterdrücken.

Beispiel

Im folgenden Beispiel wird C4512 generiert.

// C4512.cpp
// compile with: /EHsc /W4
// processor: x86

class base {
private:
   const int a;

public:
   base(int val = 0) : a(val) {}
   int get_a() { return a; }
};   // C4512 warning

class base2 {
private:
   const int a;

public:
   base2(int val = 0) : a(val) {}
   base2 & operator=( const base2 & ) {}
   int get_a() { return a; }
};

int main() {
   base first;
   base second;

   // OK
   base2 first2;
   base2 second2;
}