Freigeben über


Compilerfehler C2299

Aktualisiert: November 2007

Fehlermeldung

'Funktion': Verhaltensänderung: Eine explizite Spezialisierung darf kein Kopierkonstruktor oder Kopierzuweisungsoperator sein.
'function' : behavior change: an explicit specialization can not be a copy constructor or copy assignment operator

Dieser Fehler kann auch infolge einer Verbesserung der Compilerkonformität für Visual C++ 2005 ausgegeben werden: In früheren Versionen von Visual C++ werden explizite Spezialisierungen für einen Kopierkonstruktor oder einen Kopierzuweisungsoperator unterstützt.

Um den Fehler C2299 zu vermeiden, darf der Kopierkonstruktor oder Zuweisungsoperator keine Vorlagenfunktion sein, sondern vielmehr eine nicht auf Vorlagen basierende Funktion, die einen Klassentyp akzeptiert. Durch jeden Code, der den Kopierkonstruktor oder Zuweisungsoperator durch explizite Angabe der Vorlagenargumente aufruft, müssen die Vorlagenargumente entfernt werden.

Weitere Informationen finden Sie unter Wichtige Änderungen im Visual C++ 2005-Compiler.

Im folgenden Beispiel wird C2299 generiert:

// C2299.cpp
// compile with: /c
class C {
   template <class T>
   C (T t);

   template <> C (const C&);   // C2299
   C (const C&);   // OK
};