Protected/Private static Variablen?



  • Hallo Forum,

    wie kann ich die static Variablen in diesem Beispiel protected/private machen? (Nur für den Setter zugänglich.)
    Ich möchte die static Var nicht unbedingt innerhalb der Funktion aufbewahren.

    class ABCD {
    public:
    //protected:
    	static std::string s_sAAAA;
    
    	static void SetAAAA(const std::string &sAAAA) {
    		s_sAAAA=sAAAA;
    	}	
    };
    
    std::string ABCD::s_sAAAA="";
    
    int main(int argc, char* argv[]) {
    	ABCD::SetAAAA("a");
    	if (ABCD::s_sAAAA.length()>0) {
    		printf("2");
    	}
    
    	return 0;
    }
    


  • Und wo ist die Frage? Private static's kannst/musst du genauso deklarieren wie öffentliche, allerdings kommst du außerhalb der Member nicht mehr an die Variablen dran (d.h. die main() kann nicht mehr den Inhalt von ABCD::s_sAAAA auslesen).



  • Ähmm... einfach die Variable protected/private deklarieren und die Setter public machen...

    class ABCD
    {
      protected:
        static std::string s_sAAAA;
      public:
        static void SetAAAA(const std::string &sAAAA) {
          s_sAAAA=sAAAA;
        }	
    };
    ...
    

    cu André



  • Die Fehlermeldung von asc Code ist:

    error C2248: 's_sAAAA' : cannot access protected member declared in class 'ABCD'



  • martin_salo schrieb:

    Die Fehlermeldung von asc Code ist:

    error C2248: 's_sAAAA' : cannot access protected member declared in class 'ABCD'

    int main(int argc, char* argv[]) 
    {
        ABCD::SetAAAA("a");
    
        if (ABCD::GetsAAAA().length() > 0) 
        {
            printf("2");
        }
        return 0;
    }
    

    Schreib dir einfach einen Getter der wie SetAAA arbeitet (nur das er halt die Variable zurückgibt).



  • Mein Fehler. Danke 🙂



  • Um nicht als Vollschuß zu gelten: Ich habe das BSP aus einem größeren Zusammenhang heraushgelöst:

    class ABCD {
      protected:
        static std::string s_sAAAA;
      public:
        static void SetAAAA(const std::string &sAAAA) {
          s_sAAAA=sAAAA;
        }   
    }; 
    
    static void SetAAAA(const std::string &sAAAA) {
      s_sAAAA=sAAAA; // Diese ging nicht, weil ich eine Zeile höher den ABCD:: Prefix vergessen hatte. Deshalb dachte ich Statics dürften nur public sein.
    }
    

Anmelden zum Antworten