Zugriff auf private Class-Member in einer public function

grasmann

Grünschnabel
Hallo,

ich weis nicht ob der Titel so richtig ausgedrückt ist XD.

Folgendes:

Ich habe eine Klasse, in der ein Array aus andere Klassen als private member enthalten ist.

Code:
class ClInventar {
public:
	ClInventar();
	virtual ~ClInventar();
	int AddItem(ClItem item, int anzahl);
private:
	ClInventarItem InventarItems[];
};

Code:
int AddItem(ClItem item, int anzahl) {
	return 0;
}

Jetzt will ich in der public function "AddItem" natürlich Zugriff auf "InventarItems" haben. Allerdings gibt er mir bei dem Versuch es in "AddItem" zu benutzen den Fehler "Symbol 'InventarItems' could not be resolved". Im Constructor hab ich Zugriff darauf.

Ist scheinbar recht schwer danach gezielt zu suchen XD, ein kleiner Tipp wäre nett.

Danke schonmal im vorraus, wahrscheinlich ist es sowieso wieder nur ne Kleinigkeit.
 
Nun ... ich weis zwar nicht wie es in C genau funktioniert , aber du müsstest dann deine Methode auch in die Klasse schreiben und nicht außerhalb da ja die Variable nur innerhalb der Klasse existiert.
 
Ja klar, die Funktion ist innerhalb der Klasse. Soweit ich das bisher begriffen habe werden die Funktionen in der header datei implementiert ( wenn das der richtige Ausdruck ist XD ) und befinden sich aber in der ".cpp"-Datei.

Aber irgendwie hab ich trotzdem keinen Zugriff darauf. Es macht auch keinen Unterschied wenn ich "AddItem" auf private setze.
 
Hallo,

du hast bei der Implementierung die Klasse vergessen. So sollte es gehen:
C++:
int ClInventar::AddItem(ClItem item, int anzahl) {
    return 0;
}
Gruß
MCoder
 
FALSCH
Ein Header-File gibt lediglich WAS zu implementieren ist. Die eigentliche Implementierung erfolgt dann im Source-File.
 
Hat wer was anderes behauptet?
Soweit ich das bisher begriffen habe werden die Funktionen in der header datei implementiert ( wenn das der richtige Ausdruck ist XD ) und befinden sich aber in der ".cpp"-Datei.
"Implementieren" ist zwar das falsche Wort dafür, aber man merkt doch, was gemeint ist...

@Grasmann: Das nennt man deklarieren.

Gruß
 
es empfiehlt sich übrigens sich die entsprechenden vollständigen namen anzugewöhnen, also
this->variablenname oder ::ClassName::static_variable bzw ::global_variable.
Die dann entstehenen fehlermeldungen sind meist leichter in den richtigen kontext zu bringen.

ein "functions have no this pointer" ist in dem oben angegeben beispiel wesendlich hilfreicher als "undefined variable bla" finde ich.

Ausserdem ist so im falle eines namens konfliktes (selber variablenname in unterschiedlichen namensräumen definiert) immer eindeutig welcher gemeint ist, und man erspaar sich auch hier unliebsame überraschungen.
 
Zurück