私は学校制度のシミュレーションである私のプロジェクトをやっています。
このメソッドを Student のフレンドとして宣言したにもかかわらず、クラス 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);
では、学生で友達として宣言した後、学生の個人データにアクセスできない理由がわかりませんか? 手伝っていただけませんか?