Sdílet prostřednictvím


Upozornění kompilátoru (úroveň 4) C4512

'class' : operátor přiřazení nelze vygenerovat.

Kompilátor nemůže vygenerovat operátor přiřazení pro danou třídu. Nebyl vytvořen žádný operátor přiřazení.

Toto upozornění může způsobit operátor přiřazení základní třídy, který není přístupný odvozenou třídou.

Chcete-li se tomuto upozornění vyhnout, zadejte operátor přiřazení definovaný uživatelem pro třídu.

Kompilátor také vygeneruje funkci operátoru přiřazení pro třídu, která ho nedefinuje. Tento operátor přiřazení je členem kopie datových členů objektu. Protože const datové položky nelze po inicializaci změnit, pokud třída obsahuje const položku, výchozí operátor přiřazení nebude fungovat. Další příčinou upozornění C4512 je deklarace nestatického datového členu referenčního typu. Pokud je záměrem vytvořit nekopírovaný typ, musíte také zabránit vytvoření výchozího konstruktoru kopírování.

Upozornění C4512 pro kód můžete vyřešit jedním ze tří způsobů:

  • Explicitně definujte operátor přiřazení pro třídu.

  • Odeberte const nebo referenční operátor z datové položky ve třídě.

  • K potlačení upozornění použijte příkaz upozornění #pragma.

Příklad

Následující ukázka vygeneruje C4512.

// 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 & ) { return *this; }
   int get_a() { return a; }
};

// Type designer intends this to be non-copyable because it has a
// reference member
class Base3
{
private:
   char& cr;

public:
   Base3(char& r) : cr(r) {}
   // Uncomment the following line to explicitly disable copying:
   // Base3(const Base3&) = delete;
};   // C4512 warning

int main() {
   Base first;
   Base second;

   // OK
   Base2 first2;
   Base2 second2;

   char c = 'x';
   Base3 first3(c);
   Base3 second3 = first3; // C2280 if no default copy ctor
}