Vererbung über 2 Klassen hinweg
-
Hi!
Ich habe hier ein Problem. Ich habe eine Klasse A, eine Klasse B und eine Klasse C.
Klasse B erbt von A und Klasse C soll von B erben. Das sieht dann schematisch folgendermaßen aus:class A {...};
#include "A.h"
class B : public A
{...};#include "B.h"
class C : public B
{...}Das Problem ist, dass ein Compilerfehler kommt, der mir sagt, dass die Basisklasse B undefiniert sei. Ich habe auch schon versucht eine Vorwärtsdeklaration zu machen, also sowas:
class B;
class C : public B
{...}Das hat aber auch nichts gebracht. Ich bin ziemlich ratlos. Weiß viellicht einer von euch, woran es noch liegen könnte?
Danke im Voraus!
-
//A.h class A {...}; //B.h #include "A.h" class B : public A {...}; //C.h #include "B.h" class C : public B {...}Das müsste eigentlich funktionieren. Hast du vielleicht etwas mehr Code?
-
ok, hier ist jetzt mal ein Code-Ausschnitt (etwas abgeändert, damit er nicht all zu lang wird, aber das wichtigste ist drin):
#ifndef CCARD_H_ #define CCARD_H_ #include <string> #include "stdlib.h" class CCard { public: CCard(string title, string description, bool RoundCard); CCard(void); virtual ~CCard(); virtual string getTitle(); virtual string getDescription(); virtual bool isTimeCard(); void setTitle(string title); void setDescription(string description); void setTimeCard(bool isTimeCard); protected: /* * title and description of a Card */ string _title; string _description; // the Card can be a TimeCard or not bool _isTime; }; #endif #ifndef TIMECARD_H_ #define TIMECARD_H_ #include <string> #include "CCard.h" class CTimeCard : public CCard { public: CTimeCard(void); ~CTimeCard(void); int getDurationTime(); protected: /** * the time which indicates how long the card will last */ int m_duration; }; #ifndef SIEGECARD_H #define SIEGEARD_H #include "Cards/TimeCard.h" class CSiegeCard : public CTimeCard { public: CSiegeCard(void); CSiegeCard(EventCardType::DiceType diceType); ~CSiegeCard(void); virtual void siegeStrategy1(); virtual void siegeStrategy2(); protected: /** * the damage */ int m_damage; }; #endif
-
Ich glaube, ich habe das Problem gelöst.
Ich habe jetzt mal all meine Include-Anweisungen nochmal durchgesehen (ich hatte sie im Code-Ausschnitt nicht mit rein genommen, sorry). Da habe ich jedenfalls festgestellt, dass einige ich gar nicht gebraucht habe. Ich habe sie rausgeschmissen und jetzt kompiliert er ohne Fehler.
Ich habe noch eine andere Klasse Player, die die Karten alle includiert. Ich hatte eine Include-Anweisung in der Card-Class auch drin von Player. Wenn ich die reinbaue, dann kommt der Fehler, wenn ich sie raus nehme, funktioniert es.