Keinen Zugriff auf Static Variable



  • Hallo !
    Ich möchte in meiner class TComPort2 prüfen, welche Ports belegt sind. Da natürlich mehrer Instanzen angelegt werden, dachte ich daran eine static Feld anzulegen, indem der Belegungsstatus jeweils aktualisiert wird.

    class PACKAGE TComPort2 : public TInterface {
    
    static  bool    UsedComPorts[MaxComPorts];
    
    private:
    public:
    }
    

    An anderer Programmstelle möchte ich das Feld abfragen :

    // Wird der Port vom Programm benötigt ?
    		if (TComPort2::UsedComPorts[p])
    			CheckListBoxComPorts->Items->AddObject(" Com" + AnsiString(p+1) + ": In use", NULL);
    		else
    			CheckListBoxComPorts->Items->AddObject(" Com" + AnsiString(p+1) + ": Not used", NULL);
    

    Das ärgert den BCB2006 C++ Compiler derart, dass er mir mir die Fehlermeldung:
    E2247 Zugriff auf "TComPort2::UsedComPorts" nicht möglich
    generiert.
    Ich habe diese Vorgehensweise genau so in der Hilfe gefunden.
    Was aber ist falsch daran ? Oder gibt es noch einen anderen Weg dies zu erreichen ?

    Vielen Dank



  • Hallo

    class PACKAGE TComPort2 : public TInterface {
    private:
    public:
    static  bool    UsedComPorts[MaxComPorts]; // Muß public sein
    }; // Semikolon nicht vergessen
    

    bis bald
    akari



  • Das klappt leider auch nicht, hatte ich vorher schon probiert.
    Jetzt wird einwandfrei übersetzt, aber der Linker meckert :
    Error: Ungelöste externe 'TComPort2::UsedComPorts' referenziert von ...



  • Hallo

    Das was ich verbessert habe, ist ja auch nur die Deklaration der statischen Variable. Du must so oder so die (da sie statisch ist) noch implementieren.

    // Headerdatei
    class PACKAGE TComPort2 : public TInterface {
    private:
    public:
    static  bool    UsedComPorts[MaxComPorts]; // Muß public sein
    }; // Semikolon nicht vergessen
    
    // Implementationsdatei
    ...
    bool TComPort2::UsedComPorts[MaxComPorts]; // Hier Implementation notwendig, nur hier Initialisierung möglich
    

    bis bald
    akari



  • Ja, wenn man es richtig macht, funktioniert auch alles 🙂

    Vielen Dank


Anmelden zum Antworten