Compilerfehler: 'error C2558' und 'error C2679'

jokey2

Erfahrenes Mitglied
Hallo Gemeinde!

Ich will in meinem Visual C++ (VS6) eine DLL schreiben, die nicht MFC verwendet, sondern nur STL und Standard C++ - Komponenten. Dazu habe ich u.A. folgende Klassen geschrieben:
Code:
class CDefineList : protected list<CDefine>  
{
public:
    CDefineList();
    virtual ~CDefineList();
};
und
Code:
class CDefine  
{
public:
    CDefine(string strMacro, string strValue);
    CDefine(CDefine &in);
    virtual ~CDefine();
    CDefine & operator =(CDefine &in);

protected:
    list<string> m_listParameters;
    string m_strName;
    string m_strValue;
};
Beim Kompilieren bringt er mir dann folgende Fehler:
c:\program files\microsoft visual studio\vc98\include\xmemory(34) : error C2558: class 'CDefine' : Kein Kopierkonstruktor verfuegbar
c:\program files\microsoft visual studio\vc98\include\xmemory(66) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Construct(class CDefine *,const class CDefine &)'

c:\program files\microsoft visual studio\vc98\include\list(161) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'const class CDefine' akzeptiert (oder keine geeignete Konvertierung moeglich)
c:\program files\microsoft visual studio\vc98\include\list(155) : Bei der Kompilierung der Member-Funktion 'class std::list<class CDefine,class std::allocator<class CDefine> > &__thiscall std::list<class CDefine,class std::allocator<class CDefine> >::operator =(const class std::list<class CDefine,class std::allocator<class CDefine> > &)' der Klassenvorlage
Und das, obwohl ich sowohl einen Kopierkonstruktor als auch einen Zuweisungsoperator angelegt habe (Ja, die Funktionsdefinitionen sind im .cpp vorhanden). Wenn ich den gleichen Code im Dev-C++ kompiliere, geht alles ohne Probleme. :confused:

Kann mir jemand sagen, was ich machen muß, daß das auch im VS korrekt funktioniert? Für ein paar Tips wäre ich sehr dankbar!
 
Das ist ja mal wieder typisch!
Tagelang zerbreche ich mir den Kopf und kaum habe ich die Frage gepostet, finde ich die Lösung:
Ich muß die Parameter in Kopierkonstruktor und Zueisungsoperator als 'const CDefine& in' definieren. Dann geht es.
 
Zurück