Zum Inhalt springen

Erstellt typedef const Objekte ? O.o


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

"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.

Geschrieben

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.

Geschrieben
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.

Geschrieben

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 B) ein Attribut einer Klasse.

Ich würde ansonsten bei C++ auf das typedef ganz verzichten. Macht die Sache imho nur komplizierter.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...