Zugriff auf Klasse ohne Objekt



  • Habe ich gelesen, führt aber auch wieder zu einer Meldung.

    class C
    {
    public:
        static void foo( int );
    private:
        int cx = 0;
    };
    
    void C::foo( int x )
    {
        cx = x;
    }
    
    int main()
    {
        C::foo( 5 );
    }
    
    invalid use of member 'C::cx' in static member function|
    


  • Die Variable cx ist in der statischen Funktion ohne Instanz nicht verfügbar. Du musst cx auch statisch machen bzw. mal nach singleton suchen...



  • ➡ das Zauberwort auch für C::cx verwenden.



  • class C
    {
    public:
        static void foo( int );
    private:
        static int cx = 0;
    };
    
    void C::foo( int x )
    {
        cx = x;
    }
    
    int main()
    {
        C::foo( 5 );
    }
    
    ISO C++ forbids in-class initialization of non-const static member 'C::cx'
    
    class C
    {
    public:
        static void foo( int );
    private:
        int cx = 0;
    };
    
    void C::foo( int x )
    {
        static C::cx = x;
    }
    
    int main()
    {
        C::foo( 5 );
    }
    
    'cx' in 'class C' does not name a type|
    

    Ich bekomm das einfach nicht hin.



  • Anmeldungsdatum: 27.10.2010

    Vielleicht solltest du mal ein C++ Buch lesen?



  • class C
    {
    public:
    	static void foo( int );
    private:
    	static int cx;
    };
    
    int C::cx = 0;
    
    void C::foo( int x )
    {
    	cx = x;
    }
    


  • manni66 schrieb:

    C++ Buch lesen?

    Schon wieder ein neues Zauberwort.



  • lemon03 schrieb:

    Damit soll ein Wert für alle aktuellen Objekte gesetzt werden.

    Bevor du jetzt auf das static aufspringst, möchte ich doch noch einmal die Anforderung geklärt haben. Du sagst "für alle aktuellen Objekte". Was meinst du mit "aktuell" genau?

    Die Lösung mit static, die hier genannt wurde, bezieht sich im Prinzip auf alle bzw. gar kein Objekt, wie auch immer man das sehen möchte. Du kannst also auch, wenn 0 Objekte exisiteren, diesen Wert setzen. Und es lesen dann immer alle Objekte denselben Wert. Wenn du mit "aktuell" meinst "alle Objekte, die gerade existieren" (aber nicht z.B. welche, die danach neu erzeugt werden), dann funktioniert diese Lösung so nicht.



  • Danke, out.

    Diese etwaige Verirrung lag an wohl an meinen edits. Gemeint ist, das ich einen Wert für alle erzeugten Objekte setzen möchte, ohne jedes Object aufzurufen.

    Nur kann ich dies im Moment nicht überprüfen, weil in meinem Code jetzt nur ein

    ||error: ld returned 1 exit status|
    

    ohne jeden Hinweis kommt. Muss ich wahrscheinlich eine neue Beispielklasse schreiben, die sich suksessive an meine annähert, um den Fehler eingrenzen zu können?



  • Aber der Fehler war so simpel, das es schnell geklärt war 😉 Im Header die Variable wie Methoden entweder mit inline oder in die cpp.

    Danke nochmals.



  • Was mich aber etwas irritiert, das das Prinzip, die Variable außerhalb der Klasse zu definieren, in meiner Suche nie aufgetreten ist. Zwar gab es etliche Hinweise auf static und Beispielcodes, die in meinem obigen Beispiel aber nie funktioniert haben.

    Ich habe dies heute tatsächlich zum ersten Mal gesehen. Danke nochmal. Kann aber auch blind sein. Kann auch sein, das noch eine Zusatzfrage kommt, muss ich aber erst prüfen. Geht darum, das trotz dieses "globale" Setzen, es immer noch die Möglichkeit gibt, für jedes Objekt bei Aufruf individuell diesen Wert zu setzen.

    Aber später...


Anmelden zum Antworten