Freigeben über


Compilerfehler bei der Implementierung einer von "CObject" abgeleiteten Klasse

Aktualisiert: November 2007

Wenn Sie eine Klasse implementieren, die von CObject abgeleitet wurde, und der Code so geschrieben ist, dass der Kopierkonstruktor oder der Zuweisungsoperator für die Klasse aufgerufen werden muss, könnte der Compiler mit den folgenden Beispielen vergleichbare Fehler ausgeben:

error C2660: 'CSample::CSample' : function does not take 1 parameters
error C2582: 'CSample' : 'operator =' function is unavailable

Sie können das Problem reproduzieren, indem Sie das Beispiel im Beispielcodeabschnitt weiter unten kompilieren.

Hinweis:

Durch den in diesem Artikel aufgezeigten Beispielcode werden die folgenden Fehlermeldungen generiert:

error C2558: 'CSample::CSample' : no copy constructor available
error C2582: 'CSample' : 'operator =' function is unavailable

Die Ursache des Compilerfehlers besteht darin, dass CObject einen privaten Kopierkonstruktor und Zuweisungsoperator in der Datei AFX.h deklariert. Folglich erstellt der Compiler keinen Standardkopierkonstruktor und keinen Zuweisungsoperator für die von CObject abgeleitete Klasse. Da der Compiler die in dieser Klasse deklarierten Funktionen nicht finden kann, gibt er diese Fehler aus.

Um die Compilerfehler zu vermeiden, müssen Sie einen Kopierkonstruktor und Zuweisungsoperator für die von CObject abgeleitete Klasse implementieren. Dies wird anhand des folgenden Beispielcodes veranschaulicht. Sie können die Fehler vermeiden, indem Sie die im Beispielcode angegebenen Zeilen auskommentieren.

Beispielcode

// _error_Compiler_Errors_when_Implementing_a_CObject.2d.Derived_Class.cpp
/* Compile options needed: /c
*/

// replace with #define _CONSOLE when compiling for Windows NT
#define _DOS

#include <afx.h>

class CSample : public CObject
{
private:
    short m_nValue;
public:
// uncomment the lines below to avoid the compiler errors
//    CSample() {}
//    CSample( const CSample &s )  // copy ctor
//        { m_nValue = s.m_nValue; }
//    CSample& operator=( const CSample &s )  // assignment operator
//        { m_nValue = s.m_nValue; return *this; }
};

int main()
{
    CSample a;
    CSample b = a;
    a = b;
}

Siehe auch

Weitere Ressourcen

Compilerwarnungen C4600 bis C4999