Ошибки в отношениях классов в переполнении стека

Я совершенно новичок в концепции классовых отношений и написал программу, чтобы проверить это. Тем не менее, это дает мне некоторые ошибки.

Имеется 5 заголовочных файлов для классов University, Dept, Teacher, Student и Course и файл .cpp. Я реализовал композицию между Университетом и Отделом и двунаправленную связь между Отделом и Студентом, Преподавателем, Курсом

uni.h

#pragma once
//#include"dept.h"class University
{
public:
University(string,int);
void setDepartmentName(string,int);
Dept* getDeptAddress(int);
~University();
private:
Dept* departments;
int totalDepts;
string name;
};

University::University(string name1,int num) :name(name1)
{
departments = new Dept[num];
totalDepts=num;
}

void University::setDepartmentName(string name,int depNo)
{
departments[depNo].setName(name);
}

Dept* University::getDeptAddress(int i)
{
return &(departments[i]);
}

University::~University()
{
delete[] departments;
}

dept.h

#pragma once
//class Student;
//class Teacher;
//class Course;
#include"course.h"#include"teacher.h"#include"student.h"class Dept
{
public:
Dept();
string getName();
void setName(string);
~Dept();

private:
Student** students;
Course** courses;
Teacher** teachers;
string name;
int noOfStudents, noOfTeachers, noOfCourses;
};

Dept::Dept()
{

}

string Dept::getName() {
return name;
}

void Dept::setName(string name1) {
name = name1;
}
Dept::~Dept()
{
}

course.h

#pragma once
class Dept;
//#include"dept.h"class Course
{
public:
Course(string, string);
void assignDept(Dept*);
string getDeptName();
~Course();

private:
Dept* department;
string code;
string name;

};

Course::Course(string code1, string name1) :code(code1), name(name1)
{}
void Course::assignDept(Dept * dep)
{
department = dep;
}
string Course::getDeptName()
{
//statement giving error: 'Use of undefined type 'Dept'' & 'left of -> must point to class'
return department->getName();
}

Course::~Course()
{}

student.h

#pragma once
#include"dept.h"class Student
{
public:
Student(string,string);
void assignDept(Dept*);
string getDeptName();
~Student();

private:
Dept* department;
string rollNo, name;
};

Student::Student(string rNo,string name1):name(name1),rollNo(rNo)
{}void Student::assignDept(Dept *dep)
{
department = dep;
}

string Student::getDeptName()
{
//statement giving error: 'Use of undefined type 'Dept'' & 'left of -> must point to class'
return department->getName();
}Student::~Student()
{
}

teacher.h

#pragma once
//#include"dept.h"class Teacher
{
public:
Teacher(string);
void assignDept(Dept*);
string getDeptName();
~Teacher();
private:
Dept* department;
string name;
};

Teacher::Teacher(string name1) :name(name1)
{}void Teacher::assignDept(Dept *dep)
{
department = dep;
}

string Teacher::getDeptName()
{
//statement giving error: 'Use of undefined type 'Dept'' & 'left of -> must point to class'
return department->getName();}

Teacher::~Teacher()
{
}

source.cpp

#include<iostream>
using namespace std;
#include<string>
#include"dept.h"#include"course.h"#include"teacher.h"#include"student.h"#include"uni.h"
int main()
{

University u1("FAST",3);
u1.setDepartmentName("CS", 0);
u1.setDepartmentName("EE", 1);
u1.setDepartmentName("CV", 2);

Student s1("l144049", "Syed Abdul Wahab");
Course c1("cs1", "ITC");
Teacher t1("abc");

c1.assignDept(u1.getDeptAddress(0));
t1.assignDept(u1.getDeptAddress(1));
s1.assignDept(u1.getDeptAddress(2));

cout << c1.getDeptName()<<endl;
cout << t1.getDeptName() << endl;
cout << s1.getDeptName() << endl;

cin.get();
return 0;

}

Однако, если я #include ‘dept.h’ в student.h, course.h и teacher.h, это выдает мне ошибки в ‘Dept’, а именно ‘идентификатор’ Dept ‘не определен’.
Любая помощь мне бы очень понравилась!

-1

Решение

Проблема в том, что у вас круговая зависимость: teacher.h включает в себя dept.h который включает в себя teacher.h, Это не может работать.

Чтобы исправить это, используйте «forward декларации» в заголовочных файлах и перенесите свои реализации в файлы .cpp.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]