我想知道两个类有没有可能拥有属性,并且可以使用彼此的方法。例如,有一个类STUDENT和一个类COURSE,STUDENT有一个已加入课程的列表,而COURSE有一个参与者(学生)的列表。我尝试了以下方法:
在学生.h中
#include <iostream>
#include <vector>
// #include "COURSE.h"
class COURSE;
class STUDENT {
string name;
std::vector<COURSE*> listCourses;
public:
STUDENT(){};
addCourse(COURSE* &course){
listCourses.push_back(course);
course.addStudent(this);
}
string getName(){
return this->name;
}
void showCourses(){
for(COURSE* course : listCourses)
std::cout << course->getName() << std::endl;
}
};
在过程中。h
#include <iostream>
#include <vector>
// #include "STUDENT.h"
class STUDENT;
class COURSE {
string name;
std::vector<STUDENT*> listStudents;
public:
COURSE(){}
addStudent(STUDENT* &student){
listStudents.push_back(student);
student.addCourse(this);
}
string getName(){
return this->name;
}
void showStudent(){
for(STUDENT* student : listCourses)
std::cout << student->getName() << std::endl;
}
};
如果我包含两个类,它说错误。如果我只包含一个,只有一个类工作,其他类有问题。
有人能帮我解决这个问题吗?我想知道是否有必要使用一些设计模式或数据结构来解决这个问题。谢谢
1条答案
按热度按时间sqxo8psd1#
是的,你所尝试的是可能的,但不是以你所尝试的方式。你需要把你的方法声明和定义分开。
此外,您的
add...
方法中存在一个缺陷,一旦Student
添加到Course
,就会导致无限递归,反之亦然。您需要检测这两个函数何时已经链接在一起,以便避免循环。试试这样的方法:
Student.h
Student.cpp
Course.h
Course.cpp