【发布时间】:2012-06-13 17:22:04
【问题描述】:
我正在做一个模拟学校系统的项目。
我对来自 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 类的 Now 方法:
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);
所以我不知道为什么在我将学生声明为朋友之后,它不允许我访问学生的私人数据?你能帮帮我吗?
【问题讨论】:
-
您到底在哪里定义 Klasa 是 Student 的朋友班?
-
Klasa 不是学生的朋友班。来自 Klasa 类的方法是 Student 类的友元方法,它在 Student.h 中声明。
-
@ViteFalcon - 他没有。他宣称 Klasa 的成员是朋友:
friend bool Klasa::assignToKlasa(Student* s); -
他并没有说他声明了整个班级为朋友,只是那个班级的一个方法
-
@SteveJessop 我认为这也是问题所在,你应该写一个答案。