[c++] Klassen-Vererbung

Dechi

Grünschnabel
Ich habe folgendes Problem:
Ich habe eine Klasse in einer Header deklariert und versuche nun
eine andere Klasse davon dieser erben zu lassen.
Aber irgendwas läuft da schief.
Die Basisklasse schaut so aus:

class CPlanet
{
protected:

// Membervariablen
long mGroesse;
int mBebauteFelder;
int mFreieFelder;
int mMaximaltemperatur;
int mGalaxie, mSonnensystem, mPosition;
char m_chName[21];

public:

// Memberfunktionen
CPlanet ();

void mNameAendern ();
void mAufgeben ();
};


Die Abgeleitete schaut im Moment so aus:

class CHeimatplanet: public CPlanet
{
public:
CHeimatplanet():
mGroesse (12800), mBebauteFelder (0), mFreieFelder (163), mMaximaltemperatur (40), mGalaxie (2), mSonnensystem (220), mPosition (10), m_chName ("Dido", 20)
{
cout << "Koordinaten: [" << mGalaxie << ":" << mSonnensystem << ":" << mPosition << "]\n";
cout << "Groesse: " << mGroesse << " km" << endl;
cout << "Felder: " << mBebauteFelder << "/" << mFreieFelder << endl;
cout << "Max. Temperatur: " << mMaximaltemperatur << "°C\n\n";
}
};


Und diese Fehler werden angezeigt:

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'm_chName' ist weder Basis noch Element

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'mPosition' ist weder Basis noch Element

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'mSonnensystem' ist weder Basis noch Element

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'mGalaxie' ist weder Basis noch Element

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'mMaximaltemperatur' ist weder Basis noch Element

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'mFreieFelder' ist weder Basis noch Element

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'mBebauteFelder' ist weder Basis noch Element

c:\programme\microsoft visual studio\myprojects\coorp mit barni\ogame\klassen.hpp(97) : error C2614: 'CHeimatplanet' : Unzulaessige Elementinitialisierung: 'mGroesse' ist weder Basis noch Element


Ich hoffe ihr könnt mir helfen!

PS: Ich benutze Microsoft Visual C++
 
Hallo Dechi

Also du hast da ein paar Fehler drin. Ich habe es etwas umgeschrieben, du solltest wenn dich das Thema interessiert ein wenig nachlesen was protected, public und private bedeutet. Außerdem das Kapitel Konstruktoren.

Die Klasse (CPlanet.h)
C++:
class CPlanet
{
  protected:

// Membervariablen
long mGroesse;
int mBebauteFelder;
int mFreieFelder;
int mMaximaltemperatur;
int mGalaxie, mSonnensystem, mPosition;
char m_chName[21];

  public:

// Memberfunktionen
CPlanet();
CPlanet (int Gr, int Bf, int Ff, int Mt, int Ga, int Ss, int Po, char *n) :
mGroesse(Gr),mBebauteFelder(Bf),mFreieFelder(Ff),mMaximaltemperatur(Mt),mGalaxie(Ga),
mSonnensystem(Ss), mPosition(Po)
{strcpy(m_chName,n);};

void mNameAendern ();
void mAufgeben ();
};


class CHeimatplanet: public CPlanet
{
  public:
   CHeimatplanet() : CPlanet(12800,0,163,40,2,220,10,"Dido")
   {};
  void output();

};
CPlanet.cpp // Hier die Funktionsdefinitionen rein
C++:
void CHeimatplanet::output()
{
     cout << "Koordinaten: [" << mGalaxie << ":" << mSonnensystem << ":" << mPosition << "]\n";
cout << "Groesse: " << mGroesse << " km" << endl;
cout << "Felder: " << mBebauteFelder << "/" << mFreieFelder << endl;
cout << "Max. Temperatur: " << mMaximaltemperatur << "°C\n\n";
}

Wie du siehst gibt es 2 Konstruktoren in der Basisklasse, eine Default und eine mit Parameter, der Default-Konstruktor sollte idealerweise alles auf 0 setzen.
Die abgeleitete Klasse besitzt nur einen Konstruktor der mit Konstanten Parametern gefüllt wird, wie du siehst wird hier der Konstruktor der Basisklasse mit den Parametern aufgerufen. Die Ausgabe wie du sie hattest gehört nicht in eine Klasse, dafür definiert man sich eine Ausgabefunktion sieh Codebsp. Hier noch die Anwendung.

C++:
int main()
{
    CHeimatplanet x;
    x.output();

    return 0;
}

mfg
 
Zurück