我正在做我的项目,即模拟学校系统。
我对来自 Klasa 类(类波兰语)的方法无法访问 Student 类的私有数据这一事实有疑问,即使我在 Student 中将此方法声明为朋友。
这是代码:
第一个学生.h:
#include <iostream>
#include "Klasa.h"
#include "SubjectType.h"
#include "SubjectGrades.h"
using namespace std;
    class Klasa;
    class SubjectGrades;
    class Student
    {
    private:
        char* name;
        int id;
        Klasa* myClass;
        //School* mySchool;
        int classIndex; //numer w dzienniku - zrobić prywatne z akcesorami
        static int counter;
    public:
        Student();
        Student(char*);
        Student(const Student&);
        Student& operator= (const Student&);
        ~Student();
        //bool assignToSchool(School*)
        //bool resignFromSchool();
        void assignToClass(Klasa*);
        void resignFromClass();
        double getMyAverageGrade(SubjectType type) const ;      //srednia ocen z danego przedmiotu dla danego ucznia
        double getMyAverageGrade() const;       //średnia ocen dla danego ucznia
        bool operator== (const Student&);
        bool operator!= (const Student&);
        friend ostream& operator<< (ostream&, const Student&);
        // akcesory
        int GetclassIndex() const;
        int SetclassIndex(int i);
        friend bool Klasa::assignToKlasa(Student* s);
        char* GetName() const { return name; }
    };
现在来自 Klasa 类的方法:
    bool Klasa::assignToKlasa(Student* s)
    {
        if(studentCount < maxStudentCount)
        {
            if(containsStudent(s))
                return false;
            if(studentCount < klasaSize) //jest miejsce dla studenta
            {
                int i = 0;
                while(studentList[i] != NULL)
                    i++;
                studentList[i] = s;
                s->classIndex=i;// = i; //tu musi byc setter
            }
            //WHATS BELOW DOESN'T MATTER FOR THIS PROBLEM, SO U DON;T NEED TO READ.
            else
            {
                cout << "Zwiekszamy rozmiar!\n";
                //musimy zwiększyć rozmiar tablicy studentList
                Student** newStudentList = new Student*[klasaSize + sizeStep];
                for(int i = 0; i < klasaSize; ++i)
                    newStudentList[i] = studentList[i];
                for(int i = klasaSize; i < klasaSize + sizeStep; ++i)
                    newStudentList[i] = NULL;
                klasaSize += sizeStep;
                delete[] studentList;
                studentList = newStudentList;
                studentList[studentCount] = s;
                s->SetclassIndex(studentCount); //tu ma byc setter
            }
            s->assignToClass(this); //mówimy studentowi - "jestem twoją klasą"
            studentCount++;
            cout << "Dodano studenta!\n";
            return true;
        }
        return false;
    }
它强调s->classIndex=i无法访问 classIndex。
同样在 Klasa.h 我声明了这个方法,如:bool assignToKlasa(Student* s);
所以我不知道为什么在我将学生声明为朋友之后它不允许我访问学生的私人数据?请你帮助我好吗?