Fehler beim Includen

DuffCola

Mitglied
Warum bekomme ich diese Fehler(Ich denke es liegt am Includen, aber ich weiß nicht wie ich richitg machen kann).
Fehler
Fehler 1 error C2143: Syntaxfehler: Es fehlt ';' vor '*' c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestate.h 11
Fehler 2 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestate.h 11
Fehler 3 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestate.h 11
Fehler 4 error C2061: Syntaxfehler: Bezeichner 'GameStateManager' c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestate.h 19
Fehler 5 error C2535: 'GameState::GameState(void)': Memberfunktion bereits definiert oder deklariert c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestate.h 19
Fehler 6 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'test' c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestatemanager.h 9
Fehler 7 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestatemanager.h 9
Fehler 8 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestatemanager.h 9
9 IntelliSense: Der Bezeichner ""GameState"" ist nicht definiert. c:\users\michael\documents\visual studio 2010\projects\spanker\spanker\gamestatemanager.h 9
Ich hoffe es ist nicht zuviel Quellcode...

GameState.h
Code:
#ifndef GAMESTATE_H
#define GAMESTATE_H

#include <SFML\Graphics.hpp>
#include "Graphics.h"
#include "GameStateManager.h"

class GameState
{
private:
	GameStateManager *gameStateManager;

public:
	virtual void update(sf::Time &elapsedTime);
	virtual void handleEvents(sf::Event &events);
	virtual void render(Graphics &graphics);

	GameState();
	GameState(GameStateManager *gameStateManager);
};

#endif
GameState.cpp
Code:
#include "GameState.h"

void GameState::update(sf::Time &elapsedTime)
{

}
void GameState::handleEvents(sf::Event &events)
{

}
void GameState::render(Graphics &graphics)
{

}

GameState::GameState()
{
	gameStateManager = nullptr;
}
GameState::GameState(GameStateManager *gameStateManager)  : gameStateManager(gameStateManager)
{

}
GameStateManager.h
Code:
#ifndef GAMESTATEMANAGER_H
#define GAMESTATEMANAGER_H

#include "GameState.h"

class GameStateManager
{
private:
	GameState test;
public:
	GameStateManager();
};

#endif
GameStateManager.cpp
Code:
#include "GameStateManager.h"

GameStateManager::GameStateManager()
{

}
 
Ich bin mir nicht 100%ig sicher, aber ich vermute, es liegt an der zirkulären Abhängigkeit. Du verwendest in der einen Klasse eine andere Klasse und der anderen wie die eine.
 
Hallo,

es sieht so aus, dass das gegenseitige Include zu Problemen führt.

Da du und in der Klasse GameState den GameStateManager als Zeiger verwendest, könntest du auch mit einer Vorwärtsdeklaration arbeiten. Statt
C++:
 #include "GameStateManager.h"
schreibst du
C++:
class GameStateManager;
Das Include in der GameState.cpp ist dann aussreichend.

Gruß
MCoder
 
Ok ich werde es mal probieren.
Aber weiß jemand, wie ich aus einem GameState im StateManager die setState Methode aufrufen kann, ohne, dass ich einen Zeiger auf ihn habe?
(Weil ich könnte ja auch, auch wenn es keinen sinn ergibt, einfach die update Methode aufrufen und ich würde dass gerne soweit wie möglich abschirmen.
 

Neue Beiträge

Zurück