2016-04-19 4 views
-1
struct teachers 
{ 
    private: 
     int gradDate; 
     int quote; 
     string name; 
     string school; 
     struct smallBoard 
     { 
      private: 
       vector<string> grade; 
       vector<string> school; 
       vector<string> emblem; 
       vector<int> year; 
     }; 
     smallBoard sb; 
    public: 
     static void retrieveInformation(vector<teachers> &_teachers); 
     static void t_addInfo(vector<teachers> &_teachers, teachers teachers_); 
     static void s_addInfo(vector<teachers::smallBoard> &_smallBoard, teachers::smallBoard smallBoard_); 
}; 

IIn C++ kann ich private Variablen einer Struktur zugreifen, nicht jedoch die privaten Variablen innerhalb des Unter struct

teachers tempt; 
tempt.name = "Bob"; 

sagen kann, aber wenn ich versuchen, eine Variable für den Zugriff innerhalb des smallBoard struct es sagt mir, es ist privat. Ich gehe davon aus, dass meine Methode, auf smallBoard zuzugreifen, nicht korrekt ist, also wie würde ich das erreichen?

+0

Sie müssen mehr Code anzeigen. Wo genau erfolgt die Zuordnung zu "Versuch.Name"? –

+0

GNU GCC. Ich habe gerade mein Problem herausgefunden und in einer Sekunde geantwortet. – EpicBlargh

+0

"... wann immer ich versuche zuzugreifen ..." Wo ist der Code, der "versucht" zuzugreifen? – AnT

Antwort

-4
struct smallBoard 
{ 
    vector<string> grade; 
    vector<string> school; 
    vector<string> emblem; 
    vector<int> year; 
}; 

struct teachers 
{ 
    private: 
     int gradDate; 
     int quote; 
     string name; 
     string school; 
     smallBoard sb; 
    public: 
     static void retrieveInformation(vector<teachers> &_teachers); 
     static void t_addInfo(vector<teachers> &_teachers, teachers teachers_); 
     static void s_addInfo(vector<smallBoard> &_smallBoard, smallBoard smallBoard_); 
}; 

Ich reparierte es, indem ich die Strukturen trennte und eine in meiner "Haupt" -Struktur definierte. Kompiliert gut.

+2

Sie haben es "repariert", indem Sie 'private' Zugriffsspezifizierer von' smallBoard' entfernt haben. Das macht es völlig unabhängig von der ursprünglichen Frage. Und wenn du das getan hast, was war der Sinn daran, 'smallBoard' aus' Lehrern' zu ziehen? I.e. Ihre "Trennung", wenn die Struktur nichts mit der Behebung zu tun hat. – AnT

+0

Ich entschuldige mich dafür, dass ich kein flüssiger Coder bin, ich denke nur darüber nach, wie ich weitergehe. – EpicBlargh

3

Das Deklarieren von smallBoard als verschachtelten Typ innerhalb von teachers ändert nichts an der Tatsache, dass smallBoard immer noch ein eigener Datentyp mit eigenen Zugriffsregeln ist. Damit teachers auf private Mitglieder von smallBoard zugreifen kann, muss teachers als friend von smallBoard deklariert werden.

struct smallBoard 
{ 
private: 
    vector<string> grade; 
    vector<string> school; 
    vector<string> emblem; 
    vector<int> year; 

    friend struct teachers; 
}; 

Auch wenn smallBoard als private Art von teachers erklärt dann kann es nicht in den Parametern der öffentlichen Methoden der teachers verwendet werden, da Anrufer nie in der Lage sein smallBoard Objekte zuzugreifen oder instanziiert. So müssen Sie smallBoard veröffentlichen:

struct teachers 
{ 
private: 
    int gradDate; 
    int quote; 
    string name; 
    string school; 
    smallBoard sb; 

public: 
    struct smallBoard 
    { 
    private: 
     vector<string> grade; 
     vector<string> school; 
     vector<string> emblem; 
     vector<int> year; 

    friend struct teachers; 
    }; 

    static void retrieveInformation(vector<teachers> &_teachers); 
    static void t_addInfo(vector<teachers> &_teachers, teachers teachers_); 
    static void s_addInfo(vector<teachers::smallBoard> &_smallBoard, teachers::smallBoard smallBoard_); 
}; 
+2

Da die 'Struktur' selbst privat ist, warum machen Sie nicht einfach ihre Mitglieder öffentlich, wenn Sie auf sie in der enthaltenen Klasse zugreifen wollen? – clcto

+0

Nie über die Verwendung von Freund gelernt, danke dafür! – EpicBlargh

+0

@clcto: das wäre für 'smallBoard sb;' Mitglied von 'teachers', aber da die' smallBoard' Struktur auch in Parametern von 'teacher' öffentlichen Methoden verwendet wird, kann 'smallBoard' selbst nicht privat sein. –

Verwandte Themen