Methode aus einem struct in eine Klasse.... :D
-
Hoi also guckt euch erstmal folgenden Code an...:
class CAppData { /* -------------------------------------------------------*/ private: /* -Declarations */ /* -------------------------------------------------------*/ struct IPlaybackData { bool fPaused; // Wiedergabe pausiert ? bool fInit; // Mediendatei geladen ? bool fMute; // Lautstärke gemutet ? unsigned int uiVol; // Lautstärke Wert bool fRepeat; // Wiederholen (Repeat-Mode)? ERepeatModes rpRepMode; // Wiederholungsmodus (RPM-ENUM) } IPlaybackData; struct IOptionsData { struct IStartupData { bool fAutoStart; // beim Systemstart laden ? bool fStartMin; // Programm miniert starten ? string strKeyName; // Name des Registry-Eintrags string strKeyPath; // Registry-Wert (Pfad) von strKeyName } IStartupData; // [> TODO: Weitere Optionen implementieren } IOptionsData; struct IInterfaceData { bool fPrstPaused; // Trackinformationssteuerelement (Presenter) pausiert ? bool fTopmostWnd; // Fenster immer im Vordergrund ? } IInterfaceData; // [> TODO: Weiteres... /* -------------------------------------------------------*/ public: /* -Declarations */ /* -------------------------------------------------------*/ CAppData(void); ~CAppData(void); /* * Playback-Methoden: */ struct IPlayback { void SetPaused (bool fPause); void SetInitialized (bool fInit); void SetMuted (bool fMute); void SetRepeated (bool fRep); void SetVolume (unsigned int uiVol); void SetRepMode (ERepeatModes rpMode); bool IsPaused (void) const; bool IsInitialized (void) const; bool IsRepeated (void) const; unsigned int GetVolume (void) const; ERepeatModes GetRepMode (void) const; } IPlayback; // Weitere... };so...das lässt sich jez einwandfrei kompilieren...nur:

Ich hab keine Ahnung wie ich bspw: SetPaused definiere...Irg.-Wie bekomme ichs mit den Gültigkeitsbereichen nicht hin
Geht das überhaupt, wenn ja WIE ?
PS: ERepeatModes ist ne enum...und so definiert:
typedef enum { RPM_SINGLE, /* nur einen Track wiederholen */ RPM_ALL, /* alle Tracks wiederholen */ RPM_SINGLE_NTIMES, /* einen Tracks n-Mal wiederholen */ RPM_ALL_NTIMES, /* alle Tracks n-Mal wiederholen */ RPM_ENSURE_UINT_ENUM = UINT_MAX /* maximal unsigned int, diesen Wert nicht benutzen */ } ERepeatModes;So, hoffe mal ihr versteht was ich meine und steigt da durch
...danke schonmal 
-
Hallo
definiert ist es ja schon, du willst sicher wissen wie du es implementierst
void CAppData::IPlayback::SetPaused(bool fPause) { ... }bis bald
akari
-
akari schrieb:
Hallo
definiert ist es ja schon, du willst sicher wissen wie du es implementierst
void CAppData::IPlayback::SetPaused(bool fPause) { ... }bis bald
akarihmm jetzt setz mal bitte das 'fInit' aus der Klasse auf 'fInit' aus dem Methodenparam. ....
das geht nit
-
Hallo
hmm jetzt setz mal bitte das 'fInit' aus der Klasse auf 'fInit' aus dem Methodenparam
Versteh ich nicht.Mein Code ansich läuft.
Allerdings hast du hier noch einen Fehler
struct IPlayback { ... } IPlayback;Das zweite IPlayback must du weglassen.
bis bald
akari
-
struct IPlaybackData { bool fPaused; // Wiedergabe pausiert ?? <<<<<<<<<<<DAS_HIER!!!!!!!! bool fInit; // Mediendatei geladen ? bool fMute; // Lautstärke gemutet ? unsigned int uiVol; // Lautstärke Wert bool fRepeat; // Wiederholen (Repeat-Mode)? ERepeatModes rpRepMode; // Wiederholungsmodus (RPM-ENUM) } IPlaybackData;setz mal das markierte element (fPaused) auf den Parameter den ich den Methode (fPause) übergeben...(sry hab mich grad vertippt^^) ...Oder anders: Implementier mal die Methode vollständig
...das hab ich nämlich nit hinbekommen 
ALSO:
void CAppData::IPlayback::SetPaused(bool fPause) { // hier fehlt ja noch was...das funzt bei mir nie ... // ''(this)'fPaused' = fPause; }
-
Hallo
SetPaused(bool fPause) ist ein Element von IPlayback, fPaused hingegen gehört zu IPlaybackData. Da es zwischen diesen beiden Definitionen keine Verbindung gibt kannst du auch von dem einem zu dem andern keine Übergabe machen.
Und ich sag nochmal das so eine Definition entweder überflüssig oder falsch ist!
struct IPlayback { ... } IPlayback;bis bald
akari
-
akari schrieb:
Hallo
SetPaused(bool fPause) ist ein Element von IPlayback, fPaused hingegen gehört zu IPlaybackData. Da es zwischen diesen beiden Definitionen keine Verbindung gibt kannst du auch von dem einem zu dem andern keine Übergabe machen.
Und ich sag nochmal das so eine Definition entweder überflüssig oder falsch ist!
struct IPlayback { ... } IPlayback;bis bald
akarijaja den Bug hab ich ja gecheckt...also gibbet das keine Möglichkeit auf die Daten zuzugreifen bzw. diese zu verändern ?
-
Hallo
IPlayback bräuchte eine Referenz auf IPlaybackData, dann könntest du von IPlayback aus die Daten von IPlaybackData ändern.
Allerdings halte ich die Unterteilung eh für Unsinn (genau aus diesem Grund). Attribute und die dazugehörigen Getter/Setter sollten in einer gemeinsamen Klasse sein.
bis bald
akari
-
Ok, verstehe ...dann nochmal vielen Dank!

-
akari schrieb:
Und ich sag nochmal das so eine Definition entweder überflüssig oder falsch ist!
struct IPlayback { ... } IPlayback;es ist nicht falsch, allerdings in meinen augen schlechter stil. es ist in C++ legal, einen namen im selben scope für einen klassen- oder enum-namen zu verwenden, als auch für ein objekt, eine funktion oder eine aufzählungskonstante. hier wird also ein struct mit IPlayback definiert und dann ein member vom typ IPlayback mit dem namen IPlayback deklariert. der name der membervariable verdeckt anschließend den namen des typs.
-
der name der membervariable verdeckt anschließend den namen des typs.
jo so isses...
Aber ne Lösung für mein Problem -oben beschrieben- hast du auch nicht oder ?
-
Sturkurklasse schrieb:
der name der membervariable verdeckt anschließend den namen des typs.
jo so isses...
Aber ne Lösung für mein Problem -oben beschrieben- hast du auch nicht oder ?
mach IPlaybackData member von IPlayback - das ist nur logisch.
-
dann meckert er wg. neu definition...aber danke :p