TDM Geschrieben 13. Dezember 2006 Teilen Geschrieben 13. Dezember 2006 Hallo, ich habe das Problem, dass ich ein Element einer Memberstruktur verändern möchte diese aber außerhalb der Klasse definiert habe: typedef struct STime { ETime_t p_eeTimeType; CTime p_oeStartDate; CTime p_oeStartTime; CTime p_oeEndDate; CTime p_oeEndTime; } STime_t; Klassendeklaration: class CZeit { public: BOOL p_bSetStartTime(const CTime& p_oNewStartTime) const; BOOL p_bSetStartDate(const CTime& p_oNewStartDate) const; BOOL p_bSetEndTime(const CTime& p_oNewEndTime) const; BOOL p_bSetEndDate(const CTime& p_oNewEndDate) const; CZeit(); virtual ~CZeit(); protected: private: STime_t m_seMembers; }; So, jetzt würd ich gern Funktionen schreiben wie ich die Elemente der Struktur verändern kann: BOOL CZeit:_bSetStartTime(const CTime& p_oNewStartTime) const { auto BOOL a_bResult = (this -> m_seMembers.p_oeStartTime != p_oNewStartTime); if (a_bResult) { this -> m_seMembers.p_oeStartTime = p_oNewStartTime; } return a_bResult; }[/code] Problem an dem ganzen ist nur, dass mir mein Compiler (VS 6.0) immer 4 Fehler bringt (da 4 mal die gleichen Funktionen): error C2678: Binaerer Operator '=' : Kein Operator definiert, der einen linksseitigen Operator vom Typ 'const class CTime' akzeptiert (oder keine geeignete Konvertierung moeglich) Woran liegt das jetzt? Ich hab in anderen Klassen schon strukturen als Member verwendet und da gehts jedenfalls. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 13. Dezember 2006 Teilen Geschrieben 13. Dezember 2006 "typedef" führt Synonyme ein und erstelle keine Objekte. (Wie kommst Du darauf?) Die Funktion "p_bSetStartTime" verändert das Objekt. Darum darf diese Funktion keine "constant member function" sein. Weil Du sie aber als solche eingeführt hast, kommt es zu dem Fehler. "auto" ist überflüssig. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. Dezember 2006 Autor Teilen Geschrieben 13. Dezember 2006 ok, es lag an dem const. STime_t m_seMembers; Ist meiner Meinung eine Instanziierung einer Struktur -> Strukturobjekt. auto, static, extern und register schreib ich immer mit damit ich seh wozu eine variable gehört. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 13. Dezember 2006 Teilen Geschrieben 13. Dezember 2006 Ist meiner Meinung eine Instanziierung einer Struktur -> Strukturobjekt. Gehört als Membervariable trotzdem vollständig zu dem Objekt, genau wie es auch Membervariablen der Typen int, char, usw. täten. auto, static, extern und register schreib ich immer mit damit ich seh wozu eine variable gehört. Die Angabe von auto ist überflüssig, denn wenn keine andere storage class angegeben wird, ist es eben implizit diese. Daher schreibt auch fast niemand auto explizit hin. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 15. Dezember 2006 Teilen Geschrieben 15. Dezember 2006 Schön wie man sich sreiten kann und doch beide Recht haben. STime_t m_seMembers ist a) ein Object vom Typ STime_t und ein Attribut einer Klasse. Ich würde ansonsten bei C++ auf das typedef ganz verzichten. Macht die Sache imho nur komplizierter. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.