Ich habe eine Header-Datei mit dem Namen Application.h, wo ich eine Überschrift namens CollisionHandler.h enthalten. CollisionHandler enthält Application.h, daher erhalte ich beim Kompilieren einen zu vielen Includes-Fehler. Um dies zu lösen ich die CollisionHandler umfassen zwischen Kopfschutz gesetzt haben, wie folgt aus:Fehler kann nicht mit Datei einschließlich Header behoben werden, die sich selbst mit Header-Wachen enthält
#ifndef COLLISION_HANDLER_INCLUDED_H
#define COLLISION_HANDLER_INCLUDED_H
#include "CollisionHandler.h"
#endif
aber wenn ich versuche, ein Objekt vom Typ CollisionHandler zu verwenden (diese Klasse definiert in CollisionHandler.h, zwischen Kopfschutz) als eine Membervariable der Application-Klasse (die auch zwischen Kopfschutz in Application.h definiert ist), habe ich diesen Fehler für jede Datei wiederholt erhalten, die Application.h (5-mal oder so) enthält:
1>c:\users\aitor\documents\visual studio 2008\projects\copter\copter\application.h(19) : error C2143: syntax error : missing ';' before '*'
1>c:\users\aitor\documents\visual studio 2008\projects\copter\copter\application.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\aitor\documents\visual studio 2008\projects\copter\copter\application.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
die Linie 19 ist die Zeile, in der ich das CollisionHandler-Objekt als eine Membervariable deklariere. Hier
ist, den Code in Application.h (mit den entsprechenden Linien eingerückt):
#include "Header.h"
#include <stdio.h>
#include "GameCharter.h"
#include <vector>
#include <boost/shared_ptr.hpp>
#ifndef COLLISION_HANDLER_INCLUDED_H //Here I include
#define COLLISION_HANDLER_INCLUDED_H //the collision
#include "CollisionHandler.h" //handler header
#endif
using namespace std;
#ifndef APPLICATION_DEFINED_H
#define APPLICATION_DEFINED_H
class LimitsManager;
class ObstacleManager;
class Application
{
public:
CollisionHandler *handler; //Here I declare the CollisionHandler
ObstacleManager *obstacleManager;
LimitsManager *limitsManager;
vector<boost::shared_ptr<GameChar> > characters;
vector<int> idsToRemove;
void gameLoop();
Application();
bool idsNeedUpdate;
bool objectsNeedToRemove;
};
#endif
Und das ist der Code für CollisionHandler.h:
#include "Header.h"
#include "Application.h"
#include "GameCharter.h"
#include "LimitObstacle.h"
#ifndef COLLISION_HANDLER_H
#define COLLISION_HANDLER_H
class CollisionHandler
{
Application *app;
public:
void handleCollisions();
CollisionHandler()
{
}
CollisionHandler(Application *app);
bool collidersAreCollidingGeneral(GameChar* char1,GameChar* char2);
bool collidersAreCollidingSecondary(GameChar* char1,GameChar* char2);
};
#endif
Auch, wenn ich class CollisionHandler;
verwenden in Application.h und dann CollisionHandler.h in der cpp-Datei, es funktioniert
Bitte zeigen Sie uns den Code, den Sie reden. –
Zwei Header einschließlich einander klingt nicht wie eine gute Idee. –
@ PéterTörök Fertig – XaitormanX