在 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 |
+---------+----------+
此架构允许您的 Teacher
和 Course
class 是独立的。 关系由Teacher_Course
class建模。
因此消除了 Teacher
和 Course
之间的任何循环依赖。
注意:为了对数据库更友好,您可能需要记录 ID 和研究外键
基本上我的代码有 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 |
+---------+----------+
此架构允许您的 Teacher
和 Course
class 是独立的。 关系由Teacher_Course
class建模。
因此消除了 Teacher
和 Course
之间的任何循环依赖。
注意:为了对数据库更友好,您可能需要记录 ID 和研究外键