2016-09-03 1 views
-1

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

Существует 5 заголовочных файлов для учебных заведений Университета, Департамента, Учителя, Студента и курса и файла .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

курса. 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 «d ept.h 'в student.h, course.h и teacher.h, он дает мне ошибки в «Dept», а именно «идентификатор» Dept' undefined '. Любая помощь мне очень понравилась!

+3

Это слишком много кода. Попробуйте создать [mcve] и опубликуйте его. –

+0

Я немного свести к минимуму, но для его завершения требуются все 6 файлов. –

+0

Не записывайте свои реализации в заголовочные файлы, и он будет работать с объявлением вперед, о котором вы узнали. – molbdnilo

ответ

3

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

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

Смежные вопросы