invalid use of non-static data member --- Wer weiß rat?



  • Hallo zusammen,

    ich bin gerade dabei eine Klasse zu programmieren:

    class system
    {	
    	public:
    
    	int process;
    
            system();
    
    	void boot(int action);
    
    };
    

    Die Implementierung sieht folgendermaßen aus:

    system::system()
    {
         process=0;
    }
    void system::boot(int action=process)
    {
    ...
    }
    

    Nun kommt mir der Compiler mit oben genannter Fehlermeldung daher:

    invalid use of non-static data member 'system::process'
    

    und ich weiß absolut nicht warum.

    Komischerweise funktioniert der Code wenn ich aus der int process eine define mache, woran liegt das?



  • Du versuchst hier, dem Parameter action einen Standardwert zuzuweisen. Der Standardwert kann aber keine Variable sein.

    Was genau willst du denn eigentlich? Soll bei jedem Aufruf von boot action auf den Wert von process gesetzt werden? process ist doch Member der Klasse und somit bekannt. Diese Zuweisung ist also nicht nur ungültig, sondern auch unnötig. Wenn du quasi ein Override zulassen willst, mach es doch anders. Standardwert=0 (in dem Fall wird process genommen), und wenn ungleich 0, gilt halt der übergebene Wert.



  • Hallo,

    danke für die Antwort.

    Also, wie du bereits richtig erkannt hast soll action beim aufruf auf den Wert von process gesetzt werden, falls keine eingabe erfolgt. Process ändert sich aber im Laufe des Programms, es geht also nicht action=0 zu schreiben.

    Wie würdest du oben geschriebenes realisieren?
    Man könnte es natürlich auch mit einer in der Methode folgenden if machen, in der action und process dann manuel verglichen werden, aber das gelbe vom ei ist das nicht...

    Gruß



  • Dann überlade die Methode:

    //private Methode:
    void system::privateBoot(int action)
    {
    ...
    }
    
    void system::boot(int action)
    {
    privateBoot(action);
    }
    
    //und
    void system::boot()
    {
    privateBoot(process);
    
    }
    


  • Hallo,

    Natürlich....
    Da hätt ich eigentlich auch selber draufkommen können 😉

    Vielen Dank an euch beide! 🙂

    Gruß



  • Liegt es nicht eher daran, dass man den Standardwert immer bei der Deklaration angibt?



  • 314159265358979 schrieb:

    Liegt es nicht eher daran, dass man den Standardwert immer bei der Deklaration angibt?

    y, tut man - was aber nichts daran ändert, dass man nur statische oder globale variablen (bzw konstanten) verwenden kann.


Anmelden zum Antworten