在 C++ 中使用 class 原型设计时遇到问题

Trouble with class prototyping in C++

基本上我的代码有 2 classes:

class teacher { 
    //has object of class course
};
class course { 
    //has object of class teacher
};

这不起作用,因为老师无法访问 class 课程,因为它是在 class 老师之后编写的。所以我尝试创建 class 原型。

class teacher;
class course;
.....
class teacher {
    //object of class course
};
class course {
    //object of class teacher
};

还是不行。是的,我确实需要这些 classes 来保存彼此的对象。请告诉我这也可以按照我想要的方式工作,而且我不必更改我的代码。真的很感激一些帮助。谢谢你。

适用于您可能想要执行的操作的代码:

teacher.h

#include <vector>
using std::vector;
class Course;

class Teacher
{
vector<Course*> courses;
...
};

course.h

#include <vector>
using std::vector;
class Teacher;

class Course
{
vector<Teachers*> teachers;
...
};

请注意,在源文件中,您需要包含两个头文件,因为现在,Teacher 不知道 Course 的功能,反之亦然。

我用原始指针来做这个是为了让你更容易理解,但你应该在某些时候切换到某种智能指针(在这种情况下可能 weak_ptr)。

顺便说一句,通常情况下,class 名字的首字母大写。

我认为您应该将此视为数据库问题。
让我们有另一个 table 包含教师和课程:

class Teacher_Course
{
  Teacher t;
  Course c;
}

table可以表示为:

std::vector<Teacher_Course> tc_table;

图片将是:

+---------+----------+  
| Teacher | Course   |  
+---------+----------+  
| Schults | Math 1   |  
+---------+----------+  
| Schults | Calculus |  
+---------+----------+  
| Jonez   | History1 |
+---------+----------+  

此架构允许您的 TeacherCourse class 是独立的。 关系Teacher_Courseclass建模。

因此消除了 TeacherCourse 之间的任何循环依赖。

注意:为了对数据库更友好,您可能需要记录 ID 和研究外键