Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Erstellt typedef const Objekte ? O.o

Empfohlene Antworten

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.

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

  • Autor

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.

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.