属性私有时遇到问题

Having trouble with attributes being private

本文关键字:遇到 问题 属性      更新时间:2023-10-16

这是我收到的编译器错误。

project1.cc:在功能std::vector<Enrollment, std::allocator<Enrollment> > returnCourseEnrollment(int)': project1.cc:84: error:课程注册::课程'是私有

project1.cc:293:错误:在此上下文中

我的代码:

290     vector<Enrollment> e;
291     for (int i=0; i<Enrollment::enrollmentList.size();i++) {
292         Enrollment enroll = Enrollment::enrollmentList[i];
293         if (enroll.course.getCourseID()) e.push_back(enroll);
294     }

我正在搜索向量以将课程 ID 与课程中的学生进行匹配。

231             string myText(line);
232             istringstream iss(myText);
233             if (!(iss>>id)) id = 0;
234             iss.ignore(1,',');
235             if (!(iss>>id2)) id2 = 0;
236             cout<<"id: "<<id<<" id2: "<<id2<<endl;
237             Enrollment newEnrollment(Student::studentList[id],Course::courseList[id2]);
238             Enrollment::enrollmentList[i] = newEnrollment;
239             i++;

这是制作矢量的地方。如您所见,向量的每个元素都被一个类的实例占用。关于如何访问我正在制作的方法中的私有属性的任何建议?

编辑:这是注册类

 82     private:
 83         Student student;
 84         Course course;
 85
 86     public:
 87         Enrollment(Student student,Course course):student(student),course(course){}
 88         Enrollment(){}
 89         static vector<Enrollment> enrollmentList;
 90         static int loadEnrollment();
 91         static vector<Enrollment> returnCourseEnrollment(int courseid);
 92         static vector<Enrollment> returnSchedule(int studentid);
 93         friend ostream& operator<< (ostream& out,Enrollment e) {
 94             out<<e.student.getName()<<"("<<e.student.getId()<<")"<<e.course.getName()<<"("<<e.course.getId()<<")";
 95             return out;

怀疑你有这样的东西:

class Enrollment
{
    // ...
    Course course;
};

应确保course成员显示在public类部分中,以便可访问,如下所示:

class Enrollment
{
public:
    Course course;
};

另一种选择是将returnCourseEnrollment()函数声明为Enrollmentfriend

class Enrollment;
class Enrollment
{
private:
    friend std::vector<Enrollment, std::allocator<Enrollment> > 
               returnCourseEnrollment(int);
    Course course;
};