Hallo Leute, habe die Dateien im Anhang mit Visualc++ 2008 kompiliert, um eine einfache Vererbung von Klassen auszuprobieren. Hierbei habe ich die Klassen-Deklarationen in eigene Header-Dateien gepackt. Die Klasse "CMinenleger" soll eine abgeleitete Klasse der Basisklasse "CRaumschiff" sein. Wenn ich das Projekt kompiliere, erhalte ich folgende Fehlermeldungen: 1>Kompilieren... 1>CMinenleger.cpp 1>d:\sonstiges\programmierung\c++_spieleprogrammierer\listing_7.11\craum schiff.hpp(4) : error C2011: 'CRaumschiff': 'class' Typneudefinition 1> d:\sonstiges\programmierung\c++_spieleprogrammierer\listing_7.11\craumsc hiff.hpp(4): Siehe Deklaration von 'CRaumschiff' 1>d:\sonstiges\programmierung\c++_spieleprogrammierer\listing_7.11\cmine nleger.hpp(6) : error C2504: 'CRaumschiff': Basisklasse undefiniert Was mache ich falsch? Viele Grüsse, BasisLer
BasisLer schrieb: > Was mache ich falsch? du musst dafür sorgen das header dateien sich mehrfach includieren lassen.. #ifndef __NAME_DER_DATEI #define __NAME_DER_DATEI class CRaumschiff { [...} }; #endif
Du hast in craumschiff.hpp keine Include Guards benutzt. Dadurch wird der Inhalt in CMinenLeger.cpp 2 mal inkludiert (einmal weil CMinenLeger.cpp selber den Inlucde macht und das zweite mal weil über CMinenleger.hpp noch ein Include erfolgt)
1 | #ifndef RAUMSCHIFF_HPP_INCLUDED
|
2 | #define RAUMSCHIFF_HPP_INCLUDED
|
3 | |
4 | // Basisklasse Deklaration
|
5 | |
6 | class CRaumschiff |
7 | {
|
8 | protected:
|
9 | int m_Farbe; |
10 | int m_Energie; |
11 | |
12 | public:
|
13 | CRaumschiff (); |
14 | ~CRaumschiff (); |
15 | void Starten (); |
16 | void Landen (); |
17 | };
|
18 | |
19 | #endif
|
Gewöhn dir an, in Header Files grundsätzlich einen Include-Guard zu setzen, denn sowas wird dir noch öfter passieren.
Alternativ könntest du natürlich auch zum Schluss kommen, dich zu fragen was denn hier
1 | // Abgeleitete Klasse Definition
|
2 | |
3 | #include <iostream> |
4 | #include "CRaumschiff.hpp" |
5 | #include "CMinenleger.hpp" |
6 | |
7 | using namespace std; |
8 | |
9 | // Konstruktor
|
10 | CMinenleger::CMinenleger () |
11 | {
|
12 | m_Minen = 10; |
13 | cout << "Neuer Minenleger erstellt" << endl; |
14 | |
15 | }
|
16 | |
17 | |
18 | // Destruktor
|
19 | CMinenleger::~CMinenleger () |
20 | {
|
21 | cout << "Minenleger zerlegt" << endl; |
22 | }
|
23 | |
24 | |
25 | CMinenleger::void Mine_Legen () |
26 | {
|
27 | m_Minen--; |
28 | cout << "Mine gelegt. Es sind noch " << m_Minen; |
29 | cout << "Minen uebrig." << endl; |
30 | }
|
den Include von "CRaumschiff.hpp" erzwingt. Und die Antwort drauf ist: Nichts. In diesem Code gibt es keinen Grund, warum dieser Include notwendig sein sollte und daher fliegt der da raus. (Das ist generell eine gute Idee, keine unnötigen Includes zu machen. Du erzeugst damit eine künstliche, unnötige Abhängigkeit zwischen 2 Files, die bei großen Projekten Kreise ziehen kann und den Vorteil des 'nur das Notwendige bei einer Änderung kompilieren' zunichte macht. In deinem Fall spielt das natürlich jetzt keine große Rolle und wirkt sich nur in einer Fehlermeldung aus, da über die Header Files ja sowieso eine Abhängigkeit besteht. Das sollte aber auch kein Freibrief sein, da nachlässig zu sein)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.