实现两个依赖类(类的前向声明)

时间:2013-04-23 20:34:31

标签: c++ error-handling

我在实现两个在定义和实现中互相使用的类时遇到了问题。我的意思是他们都互相依赖。

他们是:

课程:

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;

课程中有些功能使用学生的功能,反之亦然。因此,我得到一个前向声明错误说: “班级学生”的前瞻声明

我如何实现这两个类,以便他们从我定义每个类的那一刻起就知道对方并且没有出错...

非常感谢。

2 个答案:

答案 0 :(得分:4)

这应该可以正常工作。在course.h中,您可以转发声明class Student;,在student.h中,您可以转发声明class Course;。您指定的错误只有在您实际定义类然后声明它时才会发生,这可能是您包含文件的顺序的结果。确保在包含实际定义之前的任何前向声明(#include只不过是'内联添加'文字其他文件的奇特方式),并且错误将消失。

答案 1 :(得分:-1)

看到你有两个选择

1 制作两个cpp文件和两个头文件,每个文件包含一个类定义,并且它们在cpp文件和每个.cpp文件中的成员函数定义包括它们各自的文件

在其中一个头文件中包含其他类的头文件。

在主函数文件中包含上一步中前一类的头文件

2 或者将所有内容保存在一个文件中

但是在课程定义之前宣布第二个课程为例

类FirstHello;

类Sec​​ondHello {   CLASS DEF };

类Firsthello {  阶级定义 };