2016-09-03 26 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; 

} 

然而,如果我#包括倒是ept.h'在student.h,course.h和teacher.h中,它給了我'錯誤的'部門'即'標識符'部門'未定義'。 任何幫助,我將不勝感激!

+3

這是太多的代碼。請嘗試創建[mcve]併發布。 –

+0

我已經最小化了它,但是需要全部6個文件才能完成。 –

+0

不要在頭文件中編寫實現,它將與您學習的前向聲明一起工作。 – molbdnilo

回答

3

問題是你有一個循環依賴:teacher.h包括dept.h其中包括teacher.h。這是行不通的。

要修復它,請在頭文件中使用「forward declarations」,並將您的實現移至.cpp文件。