2012-04-08 19 views
2

Ich habe einen Fehler bekommt:"Basisklasse undefiniert."

error C2504: 'employee' : base class undefined.

Ich bin 2010.

Visual Studio Dies ist mein erstes Mal der Arbeit mit Vererbung in C++ und ich kann nicht herausfinden, was ich tue falsch. Wenn ich versuche, eine Klasse zu erstellen, die eine andere ableitet, heißt das, dass die Elternklasse nicht definiert ist, obwohl ich die Header-Datei der Elternklasse eingeschlossen habe. Was könnte das Problem sein?

Main.cpp:

#include <string> 
#include <iostream> 
using namespace std; 

#include "manager.h" 

int main() 
{ 
manager ian; 
ian.getdata(); 
ian.putdata(); 

return 0; 
} 

Manager.h:

#pragma once 
#include "employee2.h" 
#include "student.h" 

class manager : private employee2, private student //Error happens here 
{ 
    //Stuff 
}; 

Student.h:

#pragma once 
class student 
{ 
    //Stuff 
}; 

Employee2.h:

#pragma once 
#include "employee.h" 
class employee2 : employee 
{ 
    //Stuff 
}; 

Es besagt, dass sowohl die Student-Klasse als auch die Klasse employee2 nicht definiert sind. Außerdem erbt die Klasse employee2 eine Klasse namens employee, die ebenfalls denselben Fehler erhält. Was mache ich falsch?

EDIT: Hier ist meine student.cpp Datei. Alle anderen CPP-Dateien, mit denen ich Fehler erhalte, sehen ähnlich aus.

+3

Zeigen Sie bitte die vollständigen Fehlermeldungen an. –

+1

1) Ich würde nicht "private" Vererbung verwenden, es sei denn, Sie waren wirklich, wirklich sicher, das ist, was Sie wollten. Bitte ändern Sie beide Unterklassen: 'class manager: public employee2, public student' und' class employee2: public employee' 2) Verliere die "#pragma once". Stellvertreter '#ifdef angestellter2_h ...' usw. – paulsm4

+1

Wo ist 'klassenangestellter'? ... Ich sehe einen' angestellter2' ... kein 'angestellter' ... Zeigen' mitarbeiter.h'? – Marlon

Antwort

1

Ich glaube nicht, dass Sie ein "x ist undefiniert" basierend auf dem Code erhalten, den Sie zeigten. Tatsächlich scheint es, dass Sie #include falsch verwenden.

#include employee.h 

sollte

#include "employee.h" 

Anders als das sein, außer der fehlenden employee Klasse, die Sie erwähnen, und manager nicht getdata mit und "putdata in Ihrem Beispiel, Sie Code kompilieren in Ordnung.

+0

Entschuldigung, ich tippte diesen Teil manuell in meinem Post. Es ist alles korrekt im Code. – FunkyVerb

+0

In diesem Fall kompilieren Sie Ihren Code mit Visual Studio 2010. Können Sie den Fehler und den verwendeten Compiler posten? Wenn es immer noch sagt "x ist undefiniert", dann vermissen Sie möglicherweise.CPP-Dateien aus Ihrem Projekt, aber Ihr Code wird mit VS2010 korrekt kompiliert. – josephthomas

+0

Fehler C2504: 'Mitarbeiter': Basisklasse undefiniert. Visual Studio 2010. – FunkyVerb

1

Stellen Sie sicher, dass am Ende jeder Datei Leerzeichen stehen Vor dem Kompilieren werden die Dateien zusammengefügt und Ihr Pragma könnte wegen etw Sein:

}#pragma once 

das '}' kommt von der vorher eingeschlossenen Datei.

Das könnte ein Grund sein. Außerdem sieht der Code so aus, als müsste er kompilierbar sein.

+0

Kann jemand bestätigen, dass dies tatsächlich passieren könnte? Es scheint ziemlich einfach für einen Compiler, dies zu vermeiden –

+0

Warum sollte der Pre-Compiler etwas einfügen, was der Benutzer wahrscheinlich nicht wollte? Ich sah Code, wo dies als Feature verwendet wurde. Kann mich nicht erinnern warum, war ein hässlicher Hack eines "schlauen" Programmierers. Dies erzeugte mehr Schaden als Nutzen. Daher haben einige Compiler eine fehlende Endzeile in einer Datei als Fehler gemeldet. –