Guten Abend zusammen
.
Ich versuche schon seit Längerem ein bestimmtes Problem zu behenben, welches wie folgt aussieht:
Ich Habe eine Klasse A und eine Klasse B. In A Habe ich eine Instanz der Klasse B, weshalb ich in A #include "B.hpp" benötige. In Klasse B habe ich jedoch auch eine Instanz der Klasse A, wodurch ich dort #include "A.hpp" benötige.
Habe dank Google einige Treffer zu diesem Thema gefunden, sowie auch diesen: http://www.easy-coding.de/problem-mit-klassen-die-sich-gegenseitig-benutzen-t2383.html
doch leider funktioniert es selbst nach dieser Anleitung bei mir irgentwie nicht.
Klasse A stellt bei mir die Klasse "Listen.hpp" dar. Klasse B hingegen "Turm.hpp".
Hier noch die Klassen und Fehlermeldung des Compilers zum besseren Verständnis:
(Denkt euch nichts wegen den Namen, sollte ein schrittweises Herantasten an ein kleines Towerdefense werden
)
Listen.hpp:
Listen.cpp:
Turm.hpp:
Turm.cpp:
Compilermeldung:
Hoffe ihr könnt mir bei der Lösung von gegenseitigem Includen helfen.
Danke schon mal im Vorraus!
MFG XoR_1337
PS.: Seit nachsichtig bei der Erklärung, schreibe noch nicht so lang in C++

Ich versuche schon seit Längerem ein bestimmtes Problem zu behenben, welches wie folgt aussieht:
Ich Habe eine Klasse A und eine Klasse B. In A Habe ich eine Instanz der Klasse B, weshalb ich in A #include "B.hpp" benötige. In Klasse B habe ich jedoch auch eine Instanz der Klasse A, wodurch ich dort #include "A.hpp" benötige.
Habe dank Google einige Treffer zu diesem Thema gefunden, sowie auch diesen: http://www.easy-coding.de/problem-mit-klassen-die-sich-gegenseitig-benutzen-t2383.html
doch leider funktioniert es selbst nach dieser Anleitung bei mir irgentwie nicht.
Klasse A stellt bei mir die Klasse "Listen.hpp" dar. Klasse B hingegen "Turm.hpp".
Hier noch die Klassen und Fehlermeldung des Compilers zum besseren Verständnis:
(Denkt euch nichts wegen den Namen, sollte ein schrittweises Herantasten an ein kleines Towerdefense werden

Listen.hpp:
Code:
#ifndef LISTEN_HPP
#define LISTEN_HPP
#include "Turm.hpp"
#include <list>
#include "Monster.hpp"
#include "Shot.hpp"
class CList
{
CTurm turm;
public:
list<CTurm*> *GetTowerList () { return (&m_TowerList); }
list<CMonster*> *GetMonsterList () { return (&m_MonsterList); }
void AddTower(CTurm *Turm);
void AddMonster(CMonster *Monster);
~CList();
void Update();
private:
list<CTurm*> m_TowerList;
list<CMonster*> m_MonsterList;
list<CTurm*>::iterator It_Tower;
list<CMonster*>::iterator It_Monster;
};
#endif
Listen.cpp:
Code:
#include "Listen.hpp"
CList::~CList()
{
It_Tower = m_TowerList.begin();
It_Monster = m_MonsterList.begin();
while(It_Monster != m_MonsterList.end())
{
delete(*It_Monster);
(*It_Monster) = NULL;
It_Monster = m_MonsterList.erase(It_Monster);
}
while(It_Tower != m_TowerList.end())
{
delete(*It_Tower);
(*It_Tower) = NULL;
It_Tower = m_TowerList.erase(It_Tower);
}
}
void CList::AddTower(CTurm *Turm)
{
m_TowerList.push_back(Turm);
}
void CList::AddMonster(CMonster *Monster)
{
m_MonsterList.push_back(Monster);
}
void CList::Update()
{
It_Tower = m_TowerList.begin();
It_Monster = m_MonsterList.begin();
while(It_Monster != m_MonsterList.end())
{
if((*It_Monster)->m_IsAlive)
{
(*It_Monster)->Update();
It_Monster++;
}
else
{
delete(*It_Monster);
(*It_Monster) = NULL;
It_Monster = m_MonsterList.erase(It_Monster);
}
}
while(It_Tower != m_TowerList.end())
{
if((*It_Tower)->IsAlive())
{
(*It_Tower)->Update();
It_Tower++;
}
else
{
delete(*It_Tower);
(*It_Tower) = NULL;
It_Tower = m_TowerList.erase(It_Tower);
}
}
}
Turm.hpp:
Code:
#ifndef TURM_HPP
#define TURM_HPP
#include <list>
#include "Sprite.hpp"
#include "Listen.hpp"
class Liste;
class CTurm
{
CList* list;
public:
CTurm(float xPos, float yPos, CList *Liste);
~CTurm();
void Update();
void Shot();
void CheckCollision();
bool IsAlive() { return(m_IsAlive); }
int m_health;
private:
CSprite m_pSpriteTurm;
CList *m_pListe;
bool m_IsAlive;
list<CShot*> m_ShotList;
list<CShot*>::iterator It_Shot;
list<CMonster*> *m_pMonsterList;
list<CMonster*>::iterator It_Monster;
float m_xPos;
float m_yPos;
};
#endif
Turm.cpp:
Code:
#include "Turm.hpp"
#include "Listen.hpp"
//------------------------------ CTurm()
//
CTurm::CTurm(float xPos, float yPos, CList *Liste)
{
bla = new CList;
m_pSpriteTurm.Load("Tower.bmp");
m_pSpriteTurm.Render(xPos, yPos);
m_IsAlive = true;
m_health = 100;
m_pListe = Liste;
m_xPos = xPos;
m_yPos = yPos;
}
//------------------------------ ~CTurm()
//
CTurm::~CTurm()
{
It_Shot = m_ShotList.begin();
while(It_Shot != m_ShotList.end())
{
delete(*It_Shot);
(*It_Shot) = NULL;
It_Shot = m_ShotList.erase(It_Shot);
}
}
//------------------------------ Update()
//
void CTurm::Update()
{
m_pSpriteTurm.Render(m_xPos, m_yPos);
CheckCollision();
It_Shot = m_ShotList.begin();
while(It_Shot != m_ShotList.end())
{
if((*It_Shot)->IsAlive())
{
(*It_Shot)->Update();
It_Shot++;
}
else
{
delete(*It_Shot);
(*It_Shot) = NULL;
It_Shot = m_ShotList.erase(It_Shot);
}
}
}
//------------------------------ Shot()
//
void CTurm::Shot()
{
CShot *Schuss = new CShot(m_xPos, m_yPos);
m_ShotList.push_back(Schuss);
}
//------------------------------ CheckCollision()
//
void CTurm::CheckCollision()
{
SDL_Rect RectShot;
SDL_Rect RectMonster;
m_pMonsterList = m_pListe->GetMonsterList();
It_Monster = m_pMonsterList.begin();
It_Shot = m_ShotList.begin();
while(It_Monster != m_pMonsterList.end())
{
RectMonster = (*It_Monster)->GetRect();
while(It_Shot != m_ShotList.end())
{
RectShot = (*It_Shot)->GetRect();
if(RectMonster.x + RectMonster.w < RectShot.x &&
RectMonster.y <= RectShot.y &&
RectMonster.y + RextMonster.h >= RectShot.y)
{
(*It_Shot)->m_IsAlive = false;
(*It_Monster)->m_IsAlive = false;
}
}
}
}
Compilermeldung:
Code:
1>------ Erstellen gestartet: Projekt: TDprob, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(13) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'turm'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(17) : error C2065: 'CTurm': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(17) : error C2059: Syntaxfehler: '>'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(17) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(18) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(30) : error C2065: 'CTurm': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(30) : error C2059: Syntaxfehler: '>'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(33) : error C2065: 'CTurm': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(33) : error C2059: Syntaxfehler: '>'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(35) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(11) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(16) : error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'Liste'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(16) : error C2065: 'Liste': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(16) : error C2143: Syntaxfehler: Es fehlt ',' vor ')'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(21) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(41) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(14) : error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'argv'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(14) : error C2065: 'argv': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(14) : error C2059: Syntaxfehler: ']'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(15) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(21) : error C2143: Syntaxfehler: Es fehlt ',' vor ')'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(31) : error C2065: 'pListe': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(31) : error C2143: Syntaxfehler: Es fehlt ',' vor ')'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(46) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(55) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(58) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(60) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(73) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(78) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(81) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(82) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\main.cpp(82) : fatal error C1004: Unerwartetes Dateiende gefunden.
1>Turm.cpp
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\sprite.hpp(37) : error C2065: 'g_pFramework': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\sprite.hpp(37) : error C2227: Links von "->GetScreen" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1> Typ ist ''unknown-type''
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(13) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'turm'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(17) : error C2065: 'CTurm': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(17) : error C2059: Syntaxfehler: '>'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(17) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(18) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(30) : error C2065: 'CTurm': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(30) : error C2059: Syntaxfehler: '>'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(33) : error C2065: 'CTurm': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(33) : error C2059: Syntaxfehler: '>'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\listen.hpp(35) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(11) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(16) : error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'Liste'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(16) : error C2065: 'Liste': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(16) : error C2143: Syntaxfehler: Es fehlt ',' vor ')'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(21) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(41) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(7) : error C2653: 'CTurm': Keine Klasse oder Namespace
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(7) : error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'Liste'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(7) : error C2065: 'Liste': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(7) : error C2143: Syntaxfehler: Es fehlt ',' vor ')'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(8) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(12) : error C2065: 'yPos': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(22) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(28) : error C2653: 'CTurm': Keine Klasse oder Namespace
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.cpp(28) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
1>Listen.cpp
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\sprite.hpp(37) : error C2065: 'g_pFramework': nichtdeklarierter Bezeichner
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\sprite.hpp(37) : error C2227: Links von "->GetScreen" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1> Typ ist ''unknown-type''
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(12) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(12) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(12) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(16) : error C2061: Syntaxfehler: Bezeichner 'CList'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(29) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(29) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(29) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(33) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(33) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(33) : error C2238: Unerwartete(s) Token vor ';'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(34) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(34) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(34) : error C2039: 'iterator': Ist kein Element von '`global namespace''
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(34) : error C2238: Unerwartete(s) Token vor ';'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(36) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(36) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(36) : error C2238: Unerwartete(s) Token vor ';'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(37) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(37) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(37) : error C2039: 'iterator': Ist kein Element von '`global namespace''
1>XXXXXXXX\documents\visual studio 2008\projects\bla\TDprob\turm.hpp(37) : error C2238: Unerwartete(s) Token vor ';'
1>Code wird generiert...
1>Das Buildprotokoll wurde unter "file://XXXXXXXX\Documents\Visual Studio 2008\Projects\bla\TDprob\Debug\BuildLog.htm" gespeichert.
1>TDprob - 86 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
Hoffe ihr könnt mir bei der Lösung von gegenseitigem Includen helfen.
Danke schon mal im Vorraus!

MFG XoR_1337
PS.: Seit nachsichtig bei der Erklärung, schreibe noch nicht so lang in C++
