Klassen und Klassenvariablen?

  • Hallo,


    ich habe folgendes Problem und steh gerade auf'm Schlau, wie ich es denn lösen könnte.


    Ich habe die Startklasse eines Plugins, in welcher ich in der MainMenuAction Methode eine Klasse vom Typ cOsdMenu aufrufe. In der Startmethode wird zusätzlich noch eine Klasse vom Typ cStatus aufgerufen.


    Jetzt möchte ich in einer Methode der Menuklasse eine Klassenvariable der Statusklasse ändern, nur wie? Der Menuklasse ist diese ja völlig unbekannt.


    Danke

    Gruss Björn.


    SilverGreen-Skin

  • Hi!


    Sowas habe ich auch mal gebraucht. Entweder beim Starten beiden das gleiche Objekt übergeben, oder die Variable als extern defnieren, dann sollte das funzen.


    Gruß,
    Brougs78

    - -- --- ================================================================ --- -- -
    Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), DD CineS2 v6 + DD DuoFlex CI // yavdr-0.6.1
    - -- --- ================================================================ --- -- -

  • Da die Status-Klasse eh nur eine Instanz besitzt, kannst Du die Variable static machen, das ist zwar nicht elegant, aber funktionell ;D


    Oder aber Du machst die Instanz deiner Statusklasse (die ja irgendwo erzeugt werden muss) global.


    Alternativ Singleton-Modell:

    Code
    class cMyStatus: public cStatus {
    private:
      cMyStatus *mSingleton;
    public:
      cMyStatus(void) { mSingleton = this; }
    
    
      static cMyStatus *Singleton(void) { return mSingleton; }
    };
  • Mist, war ich zu langsam.
    Ich werde das mal ausprobieren. Danke Euch beiden.


    //EDIT ON


    so sieht meine Klasse jetzt aus


    beim make plugins hagelt es dann folgenden Fehler

    Code
    volumecontrol.h: In static member function `static cStatusVolumeControl*
       cStatusVolumeControl::Singleton()':
    volumecontrol.h:26: error: invalid use of member `
       cStatusVolumeControl::mSingleton' in static member function


    Hat jemand einen Tipp?


    //EDIT OFF


    //EDIT 2


    Hallo,


    inzwischen funktioniert es. Hab die Variable als extern definiert.


    //EDIT 2 OFF

    Gruss Björn.


    SilverGreen-Skin

    3 Mal editiert, zuletzt von Björn ()

  • Sollte korrekt sein. Lange kein C++ mehr, weil es einfach eine miese Programmiersprache ist.

    (( Kein VDR im Augenblick ))
    Desktop: OS X 10.4 - PowerBook G4
    Misc. HW: XBox 1.0 w/ XBMC & Sanyo Z3S & Onkyo TX-SR503E


  • So is besser ;)


    arghgra

  • Ja ohne Rückgabetyp wird das in der Tat nix ;)
    Und das man bei Klassen ein "*" anhängen muss - was anderes soll es denn sonst sein? Hach Java ist so viel hübscher - und Pyhton, Obj-C, Smalltalk ... etc.

    (( Kein VDR im Augenblick ))
    Desktop: OS X 10.4 - PowerBook G4
    Misc. HW: XBox 1.0 w/ XBMC & Sanyo Z3S & Onkyo TX-SR503E

  • Ob das gut ist das Status Objekt erst beim ersten Abruf zu erzeugen? ;)


    Müsste notfalls ein Dummyaufruf von instance() in die Start-Methode, dann aber lieber nen eigenen "Starter" (finds schlechten Stil eine Methode für "liefere Objekt" für "erzeuge Objekt" zu missbrauchen).

  • Zitat

    Original von LordJaxom
    Ob das gut ist das Status Objekt erst beim ersten Abruf zu erzeugen? ;)


    Müsste notfalls ein Dummyaufruf von instance() in die Start-Methode, dann aber lieber nen eigenen "Starter" (finds schlechten Stil eine Methode für "liefere Objekt" für "erzeuge Objekt" zu missbrauchen).


    Kommt dann auf den Einsatz drauf an - der klassische Singleton sieht ungefähr so aus ;).


    arghgra

  • Zitat

    Original von ravemax
    Ja ohne Rückgabetyp wird das in der Tat nix ;)
    Und das man bei Klassen ein "*" anhängen muss - was anderes soll es denn sonst sein? Hach Java ist so viel hübscher - und Pyhton, Obj-C, Smalltalk ... etc.


    Ohne Worte

  • Zitat

    Original von ravemax
    Und das man bei Klassen ein "*" anhängen muss - was anderes soll es denn sonst sein?


    Es könnte etwas anderes als ein Zeiger auf ein Objekt sein.
    Beispielsweise ein Objekt.

    This is a .44 Magnum, the most powerful handgun in the world. It can take your head clean off. You've got to ask yourself one question, Do I feel lucky?
    easyvdr 0.9a2 - TT-DVB-S2-6400 - ASUS AT3IONT-I deluxe - Atom 330 - 1,5TB WD EADS - Denon 1910 - Toshiba 42X3030D - Harmony 700

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!