函数参数中未声明的标识符

spa*_*pan 2 c++ winapi header-files

编译我正在为教育目的而工作的小游戏时,我收到一个未声明的标识符错误,我无法理解为什么以及它来自何处.任何帮助是极大的赞赏.

为什么我的"激光头"文件中的以下行会生成未声明的标识符错误C2065?

bool hit(std::vector<Alien*> aliens);
Run Code Online (Sandbox Code Playgroud)

这是完整的头文件:

#ifndef LASER_HPP_
#define LASER_HPP_

#include "Ship.h"
#include "Alien.h"
#include "Vector.h"

class Laser : public Sprite {
    private :
        bool armed;
        int reloadTime, width, height, radius;

        std::vector<Vector> bullets;

        bool circleCollision(int x, int y, Ship* ship);
        void reload();
    public:
        enum Type {
            RED,
            BLUE
        };

        Laser(Type type);

        bool hit(std::vector<Alien*> aliens);
        bool hit(Ship* ship);
        void shoot(int x, int y, int dy);
        void update();
        void draw();
};

#endif LASER_HPP_
Run Code Online (Sandbox Code Playgroud)

还有Alien的头文件:

#ifndef ALIEN_HPP_
#define ALIEN_HPP_

#include "Laser.h"
#include "Ship.h"

class Alien : public Ship {
    private:
        int nextX, laserSpeed, shotDelay;
        bool attacking;
        time_t lastShot;

        bool targetReached();
        bool timeToShoot();
        bool enteringStage();

        void shoot();
        void move();
        void init();
    public:
        Alien();
        Alien(const char* filename);
        Laser* laser;

        void setNextTarget();
        void update();
        void attack();
        void die();
};

#endif ALIEN_HPP_
Run Code Online (Sandbox Code Playgroud)

我正在使用VisualStudio 2012:S

错误:

 error C2065: 'Alien' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

这是循环包含依赖的典型例子.该Laser.hpp文件需要需要该Alien.hpp文件的Laser.hpp文件,依此类推.

在这种情况下,Laser.hpp根本不需要Alien.hpp文件,只需要知道有一个名为的类Alien.因此,要解决这个问题,你删除的包容Alien.hppLaser.hpp,并添加一个声明中的Alien类:

class Alien;
Run Code Online (Sandbox Code Playgroud)