Invalid use of nonstatic data member - Fehler bei Parameterzugriff!



  • Hallo,

    ich habe da ein Problem mit dem Programmieren einer Klasse.
    Und zwar sieht das ganze destilliert etwa so aus:

    class Secret {
    public:
    	//Konstruktor
    	Secret();
    	//Destruktor
    	virtual ~Secret();
    	//Meine Funktionen
    	char feld [1024];
    
    	void input();
    
    };
    

    Und dazu die Funktion "input()"

    void input(){
    	char tempField [1024]; //Wie das array gefüllt wird, sei mal zweitrangig
    	Secret::feld = tempField;
    
    }
    

    Und egal wie ich mich drehe bei zugriff auf feld bekomme ich den Fehler
    "Invalid use of non-static data member"

    Vielleicht sollte noch erwähnen, dass es unter Windows mit Visual Studio so geklappt hat, ich aber jetzt Linux Ubuntu (Editor: Eclipse) verwende.

    Ich hoffe es kann mir jemand helfen.

    Gruß

    Max


  • Mod

    Mit der Syntax gehört input() nicht zu Secret sondern ist eine freie Funktion. So geht das:

    void Secret::input(){
    

    Ich kann aber kaum glauben, dass es einen Compiler geben soll, der dir das genau so wie es bisher da stand abgenommen haben soll. Das wäre wirklich krass gegen den Standard.

    Nach der Änderung wird das zwar compilieren, jedoch nicht so funktionieren wie von dir gedacht, da man mit Arrays gänzlich anders umgeht. Ich verweise dich aber mal auf die C++-Äquivalente std::vector und std::string mit denen du ganz intuitiv genauso umgehen kannst wie mit anderen Variablen.



  • kaum macht mans richtig, geht's!

    danke erstmal...
    aber theoretisch sollte doch auch eine externe Funktion zugriff auf eine public variable haben, oder habe ich da was falsch verstanden?



  • bertibott schrieb:

    kaum macht mans richtig, geht's!

    danke erstmal...
    aber theoretisch sollte doch auch eine externe Funktion zugriff auf eine public variable haben, oder habe ich da was falsch verstanden?

    Jein. Dazu ist aber eine Instanz dieser Klasse notwendig.

    Secret a;
    
    a.feld = foo;
    

Anmelden zum Antworten