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
    akari

    hmm 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
    akari

    jaja 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! 👍


  • Mod

    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 ?


  • Mod

    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


Anmelden zum Antworten