函数参数中未声明的标识符
Undeclared identifier in function parameter
我在编译我正在为教育目的而开发的小游戏时收到一个未声明的标识符错误,我无法为世界理解它的原因和来源。任何帮助将不胜感激。
为什么我的"激光标头"文件中的以下行会生成未声明的标识符错误 C2065?
bool hit(std::vector<Alien*> aliens);
这是完整的头文件:
#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_
还有《异形》的头文件:
#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_
我正在使用 VisualStudio 2012 :S
错误:
error C2065: 'Alien' : undeclared identifier
这是循环包含依赖的一个典型示例。Laser.hpp
文件需要Alien.hpp
文件,而文件需要Laser.hpp
文件,依此类推。
在这种情况下,Laser.hpp
根本不需要Alien.hpp
文件,它只需要知道有一个名为 Alien
的类。因此,为了解决这个问题,您删除了Laser.hpp
中包含Alien.hpp
,并添加Alien
类的声明:
class Alien;
这是因为包含递归头文件。考虑一下,laser.h
包括alien.h
,其中再次包括laser.h
。这件事,编译器做不到,即使有标题保护。这里需要的是前向声明,而不是#include "Alien.h"
添加一个声明class Alien;
,这在您的情况下就足够了,因为您只使用指向Alien
类的指针。
相关文章:
- #ifdef和未声明的标识符
- 未声明的标识符编译暗黑破坏神 2 程序"muleview"
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 使用未声明的标识符"sqrt"?
- 对类 (C++) 中的私有变量使用未声明的标识符
- 我的代码中有错误,未声明的标识符
- 未定义的标识符/未声明
- 错误:在 C++ 'std'使用未声明的标识符
- 在编译器之前检测未声明的标识符
- 使用未声明的标识符'temp'
- 使用未声明的标识符"yylex"和"yyin"?
- 使用"class"关键字,后跟未声明的标识符
- 未声明的标识符错误,但变量定义正确 (?)
- C2065 'cout':未声明的标识符
- C++模板模板参数中未声明的标识符
- 错误:在 C++ 目标 c 混合'self'使用未声明的标识符
- C++循环依赖关系,未声明的标识符
- 我的函数调用 (C++) 中的未声明标识符
- 未找到标识符和未声明的标识符