У меня проблема с двумя классами, которые каждый должен знать о другом в своем заголовочном файле.
Structure.h
#ifndef STRUCTURE_H
#define STRUCTURE_H
#include <vector>
#include "Sprite.h"
#include "Bullet.h"
class Structure: public Sprite{
public:
Structure(const BITMAP bm, const Vec2& pos, const Vec2& vel,
const RECT boundaries, std::vector<std::vector<bool>> holes);
virtual ~Structure() = 0;
void takeDamage(const Bullet* bullet);
protected:
std::vector<std::vector<bool>> mBulletHoles;
};
#endif
Structure.cpp
#include "Structure.h"
Structure::Structure(const BITMAP bm, const Vec2& pos, const Vec2& vel,
const RECT boundaries, std::vector<std::vector<bool>> holes)
:Sprite(bm, pos, vel, boundaries),
mBulletHoles(holes)
{}
void Structure::takeDamage(const Bullet* bullet){
}
Sprite::~Sprite(){}
Bullet.h
#ifndef BULLET_H
#define BULLET_H
#include "Animate.h"
#include "Structure.h"
class Bullet: public Sprite{
public:
Bullet(const BITMAP bm, const Vec2& pos, const Vec2& vel, const RECT boundaries,
bool friendly);
virtual ~Bullet();
int checkCollision(Animate* target);
void checkCollision(Structure* target, float dt);
private:
float mTimeSinceCollision;
bool mFriendly;
bool mActive;
const static float mPenetrationTime;
};
#endif
Bullet.cpp
#include "Bullet.h"
Bullet::Bullet(const BITMAP bm, const Vec2& pos, const Vec2& vel,
const RECT boundaries, bool friendly)
:Sprite(bm, pos, vel, boundaries),
mTimeSinceCollision(0.0f),
mFriendly(friendly),
mActive(true)
{}
int Bullet::checkCollision(Animate* target){
int returnPoints = 0;
if((target->identifier() == "Player") && !mFriendly){
if(isTouching(target)){
target->takeDamage();
mActive = false;
}
}else if((target->identifier() == "Alien") && mFriendly){
if(isTouching(target)){
returnPoints = target->takeDamage();
mActive = false;
}
}
return returnPoints;
}
void Bullet::checkCollision(Structure* target, float dt){
if(isTouching(target)){
mTimeSinceCollision += dt;
target->takeDamage(this);
}
if(mTimeSinceCollision >= mPenetrationTime){
mActive = false;
}
}
Bullet::~Bullet(){}
const float Bullet::mPenetrationTime = .05;
, поскольку два заголовочных файла вызывают друг друга, я получаю много ошибок.Я устал заменять
#include "Bullet.h"
в Structure.h на
class Bullet;
, но потом компилятор сказал, что у меня есть несколько определенных типов.Как вы можете обойти зацикливание операторов #include?