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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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