2012-03-29 2 views
0

Ich habe Probleme mit C++ aufrufende Elemente eines Array des Typs Klasse. Hier ist ein Beispiel meines Codes;Aufruf von privaten Mitgliedern einer anderen Funktion - Probleme mit Arrays und Typen

Das Problem, das ich habe, ist, bekomme ich Fehler in der Linie;

cout << humanArray[i].gender << endl; 

sagen

'Geschlecht' ist privat.

Allerdings deklarierte ich nicht das Array des Typs Mensch? Und ich bekomme keinen Fehler beim Hinzufügen, also nehme ich an, das funktioniert ok. Aber wenn ich versuche, ein Element aufzurufen, erhalte ich einen Fehler. Ich kann die Variablen nicht von privat auf öffentlich ändern.

+0

Sie wissen, was "privat" bedeutet, richtig? Der springende Punkt ist, dass es außerhalb der Klasse nicht zugänglich ist. – cHao

Antwort

2

ändern es zu

cout << humanArray[i].getGender() << endl; 

Technischer Hintergrund auf, warum dies funktioniert:

Die Membervariable genderprivaten in der Human Klasse deklariert wird, damit andere Klassen (und Instanzen von ihnen) kann nicht darauf zugreifen (ohne spezielle Erlaubnis). Die Elementfunktionen Human::getGender() und Human::setGender() sind public deklariert, so dass auf Instanzen (Objekte) der Klasse Human zugegriffen werden kann.

Da eine Memberfunktion privaten Mitglieder (Variablen und Funktionen) der Klasse zugreifen kann es gehört, Human::getGender() (gilt auch für Human::setGender()) Human die privatengender Membervariable der Klasse zugreifen können.

Die Funktion join() ein Mitglied der Klasse ist World, die von der Klasse unterscheidet Human, so hat es den Zugriff auf öffentlichen Mitglieder (dh hat Zugang zu Human::getGender(), aber nicht beschränkt auf Human::gender)

die Elemente Zugreifen der Array hat nichts mit dem oben genannten zu tun.Alle Elemente eines Arrays können durch Code zugegriffen werden, die Sichtbarkeit/Zugriff auf das Array hat (man denke an die Elemente, als ob sie öffentliche innerhalb des Arrays waren, ohne die Möglichkeit, sie privaten eingestellt)

1

Sie sollten Ihre Accessormethode getGender()

cout << humanArray[i].getGender()<< endl; 

hummanArray ist Mitglied der World und so alle Instanzen der Klasse World kann man erkennen, zugreifen.

gender ist ein Mitglied der Klasse Human und kann daher nicht direkt von Elementfunktionen der Klasse World aufgerufen werden.

0

Das Problem ist, dass die Elementvariable gender tatsächlich als privat deklariert ist, so dass Sie nicht von der Weltklasse darauf zugreifen können. Wenn du humanArray[i].gender sagst, bekommst du einen Menschen und dann versuchst du auf sein Geschlecht zuzugreifen (was privat ist). Verwenden Sie stattdessen humanArray[i].getGender().

Verwandte Themen