2

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

他们来了:

课堂课程:

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;

课程中有一些函数使用学生的函数,反之亦然。因此,我收到一个前向声明错误说:前向声明'class Student'

我如何实现这两个类,以便它们从我定义每个类的那一刻起就相互了解并且不会出错..

非常感谢。

4

2 回答 2

4

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

于 2013-04-23T20:40:52.797 回答
-1

看到你有两个选择

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

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

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

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

但是就在类定义之前,例如声明第二个类

类FirstHello;

类 SecondHello { 类 DEF };

类 Firsthello { 类定义 };

于 2013-04-23T20:49:06.217 回答