^Fehlermeldung beim Vererben von Klassen
-
Hallo zusammen, ich spiele gerade mal etwas mit Boarlandbuilder rum. Wo ich dann auch gleich ein Fehler bekomme den ich nicht nachvollziehen kann.
Ich erstelle eine Klasse A. Implementiere schön alle nötigen methoden und attribute.."Alles funktioniert wunderbar". Jetzt möchte ich aber noch eine Klasse B implementieren die alle Methoden und Attribute von Klasse A erbtalso
#pragma once #include "klasse_a.h" class b : public a { protected: //alle Attribute public: //alle methoden };
Jetzt kommt ein Fehler beim Compilieren:
[C++ Fehler] Person.h(5): E2238 Bezeichner 'Person' mehrfach deklariert
[C++ Fehler] Person.h(4): E2344 'Person' bereits deklariert
[C++ Fehler] dozent.h(4): E2040 Deklaration nicht ordnungsgemäß abgeschlossenWeiß jemand woran das liegt? Der Code ist jedenfalls richtig?!
-
Hallo
Der gezeigte Code ist soweit in Ordnung (auch wenn ich nicht wüßte das der Builder pragma once unterstützt). Da aber die Fehlermeldungen sich auf ein Symbol "Person" bezieht das im gezeigten Code nicht auftaucht soll das nichts heißen.
bis bald
akari
-
Sorry verstehe diesen Satz nicht wirklich...
akari schrieb:
Hallo
Da aber die Fehlermeldungen sich auf ein Symbol "Person" bezieht das im gezeigten Code nicht auftaucht soll das nichts heißen.
akariAlso der Code sieht so aus:
//--------------------------------------------------------------------------- #ifndef personH #define personH //--------------------------------------------------------------------------- #endif #include<string> using namespace std; class person { public: person(); virtual ~person(); void putName(string); void putVorname(string); string getName(void); string getVorname(void); protected: string name; string vorname; };
/--------------------------------------------------------------------------- #ifndef dozentH #define dozentH //--------------------------------------------------------------------------- #endif #include "Person.h" class Dozent : public person { public: Dozent(); virtual ~Dozent(); void putMA_Nummer(int); int getMA_Nummer(); protected: int ma_nummer; };
//--------------------------------------------------------------------------- #ifndef schuelerH #define schuelerH //--------------------------------------------------------------------------- #endif #include "Person.h" class schueler : public person { protected: int klasse; int id; public: schueler(); virtual ~schueler(); int getKlasse(); void putKlasse(int); int getID(); void putID(int); };
Vieleicht siehst Du ja jetzt den Fehler ???
-
Das #endif gehört jeweils hinter die Klassendeklaration... Also in die letzt Zeile verschieben.
-
Tatsechlich, es hat nur daran gelegen...Ich denke das ist eine eigenheit vom Borland oder??? beim Visual C++ bzw. wenn ich es unter Linux Programmieren (gcc-compiler) gibt es diese defines nicht....Naja jetzt funktioniert es und ich kann weiter machen...Vielen dank
-
ferro schrieb:
Ich denke das ist eine eigenheit vom Borland oder???
Keineswegs, vielmehr verhält es sich umgekehrt. #pragma once ist eine Eigenheit von Visual C++, die nicht im Standard enthalten ist. Die Variante mit #ifndef/#define/#endif funktioniert überall.