2012-04-10 11 views
1

Ich habe einige Stunden damit verbracht zu recherchieren und herauszufinden, warum ich diesen Fehler bekomme. Im Wesentlichen sind die drei Dateien, die mit dem Erben zu tun haben, CollegeMember.h, Employee.h und EmpAcademicRecord.h. Mitarbeiter. Erbt von CollegeMember.h und EmpAcademicRecord.h erbt von Employee.h. Wie dieses CollegeMember < - Employee < - EmpAcademicRecord. Der Fehler tritt in EmpacademicRecord.h auf. Hier sind die drei Dateien.erwarteter Klassenname vor '{' Token. C++ Vererbung

CollegeMember.h

#include <cstdlib> 
#include <iostream> 
#include<ctype.h> 
#include<string.h> 
#include "Employee.h" 
#include "Student.h" 
using namespace std; 

// **************************************************************************** 
// Class Definitions follow 
typedef char* String; 

// The CollegeMember class 
class CollegeMember 
{ 
    protected: 
int ID_Number; 
string FirstName, LastName; 
string AddressLine1, AddressLine2, StateProv, Zip; 
string Telephone; 
string E_Mail; 
string answer, answer2, answer3, answer4;//used as sort of booleans for use with  validation 

// member functions 
public: 
CollegeMember (); // constructor 
CollegeMember(const CollegeMember&); //overloaded constructor 
void Modify (CollegeMember Member); 
void InputData(int x); 
string Summary (); //summary 
string PrintMe(); //fully describes 
}; // End of CollegeMember class declaration 

Employee.h

#include <cstdlib> 
#include <iostream> 
#include<ctype.h> 
#include<string.h> 
#include "EmpAcademicRecord.h" 
#include "EmpEmploymentHistory.h" 
#include "EmpExtraCurricular.h" 
#include "EmpPersonalInfo.h" 
#include "EmpPublicationLog.h" 

using namespace std; 

// **************************************************************************** 
// Class Definitions follow 
typedef char* String; 

// The Employee Class 
class Employee: protected CollegeMember 
{ 
float Salary; 
protected: 
string Department, JobTitle; 
// Member Functions 
public: 
Employee ();  // constructor 
void Modify (Employee ThisEmp); 
void InputData(int x); 
void SetSalary (float Sal) // Specified as an in-line function 
{ Salary = Sal;} 
float GetSalary () {return Salary;} // Specified as an in-line function 
string Summary (); //summary 
string PrintMe(); //fully describes 
}; // End of Employee class declaration 

EmpAcademicRecord.h

#include <iostream> 
#include <cstdlib> 
#include<ctype.h> 
#include<string.h> 

using namespace std; 

typedef char* String; 

class EmpAcademicRecord: protected Employee{ //error occurs on this line 
     protected: 
       int ReferenceNumber; 
       string Institution; 
       string Award; 
       string start; 
       string end; 

       public: 
         EmpAcademicRecord(); 
         void InputData (int x); 
         void Modify(EmpAcademicRecord ThisRec); 
         void Summary(); 

     }; 

Jede mögliche Hilfe bei diesem würde sehr geschätzt.

Antwort

3

Diese Art von Fehler wird normalerweise dadurch verursacht, dass der Typ nicht definiert wird, wenn Sie versuchen, ihn zu verwenden.

In diesem Fall scheint es, dass Sie EmpAcademicRecord.h enthalten sind, können erste Employee.h enthalten (das schließt an der Spitze des ehemaligen zeigen nicht die letztere) ohne zu haben.

Mit anderen Worten an dem Punkt, wo der Compiler sieht:

class EmpAcademicRecord: protected Employee { //error occurs on this line 

es keine Ahnung hat, was die Employee Klasse.

Es kann einfach eine Frage der Zugabe sein:

#include "Employee.h" 

an der Spitze dieser Datei ist es ein wenig schwierig, sicher zu sein, da wir die Codedateien nicht haben. In jedem Fall ist es sicherlich ein guter erster Schritt.

Da EmpAcademicRecord.h von Employee.h enthalten ist, führt dies wahrscheinlich zu einer unendlichen Rekursion.

Sie könnten das mit Schutzvorrichtungen beheben, aber ich kann nicht sehen warum Sie brauchen, dass Particulat Einschluss. EmpAcademicRecord ist abhängig von Employee, nicht andersherum.

+0

Wenn Sie "employee.h" angeben, müssen Sie Header-Wächter einfügen, da "employee.h" diese Datei enthält. – chris

+0

Danke für schnelle Rückmeldung! Ich habe das schon mal ausprobiert und devC++ schien einfach einzufrieren. In einem anderen Versuch habe ich das # include "Employee.h" in die EmpacademicRecord-Klasse eingefügt und dann #include "EmpAcademicRecord.h" in die CPP-Hauptdatei (die ich enthalten sollte) eingefügt und es wurde der Fehler beseitigt. Danke noch einmal! – user1323056

+0

Daher der Kommentar "vielleicht eine einfache Sache", aber ich werde das zur Antwort hinzufügen. – paxdiablo

Verwandte Themen