我在实现两个在定义和实现中互相使用的类时遇到了问题。我的意思是他们都互相依赖。
他们是:
课程:
class Course {
int courseId;
int maxSignedStudents;
int numOfStudentsSigned;
AVLTree<Student*> signedStudents;
Queue<Student*> waitingQueue;
public:
Course(int courseId, int size);
int getFreeSpots() {
return maxSignedStudents - numOfStudentsSigned;
}
void addStudent(Student* newStudent);
int getId(); //TODO: Added this func
void removeFromSignedStudents(int studentId);
class CourseIsFull: std::exception {};
};
班级学生:
class Student {
int id;
AVLTree<Course*> signedCourses;
//and not "Course"
AVLTree<QueueNode<Student*>* > waitingCourses;
public:
Student(int studentId);
int getId();
void addSignedCourse(Course* newCourse);
void addToWaitingCourses(int courseId, QueueNode<Student*>* newCourse);
Course* getSignedCourse(int courseId);
void removeFromSignedCourses(int courseId);
};
现在我在Course.h中添加了一个前向声明,如下所示:
class Student;
课程中有些功能使用学生的功能,反之亦然。因此,我得到一个前向声明错误说: “班级学生”的前瞻声明
我如何实现这两个类,以便他们从我定义每个类的那一刻起就知道对方并且没有出错...
非常感谢。
答案 0 :(得分:4)
这应该可以正常工作。在course.h中,您可以转发声明class Student;
,在student.h中,您可以转发声明class Course;
。您指定的错误只有在您实际定义类然后声明它时才会发生,这可能是您包含文件的顺序的结果。确保在包含实际定义之前的任何前向声明(#include
只不过是'内联添加'文字其他文件的奇特方式),并且错误将消失。
答案 1 :(得分:-1)
看到你有两个选择
1 制作两个cpp文件和两个头文件,每个文件包含一个类定义,并且它们在cpp文件和每个.cpp文件中的成员函数定义包括它们各自的文件
在其中一个头文件中包含其他类的头文件。
在主函数文件中包含上一步中前一类的头文件
2 或者将所有内容保存在一个文件中
但是在课程定义之前宣布第二个课程为例
类FirstHello;
类SecondHello { CLASS DEF };
类Firsthello { 阶级定义 };