我最近一直在为多个文件包含错误而苦苦挣扎。我正在开发一款太空街机游戏,并将我的类/对象划分为不同的 .cpp 文件,并确保一切仍能正常工作,我构建了以下头文件:
#ifndef SPACEGAME_H_INCLUDED
#define SPACEGAME_H_INCLUDED
//Some Main constants
#define PI 3.14159265
//Standard includes
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <vector>
using namespace std;
//SDL headers
#include "SDL.h"
#include "SDL_opengl.h"
#include "SDL_mixer.h"
#include "SDL_image.h"
//Classes and project files
#include "Player.cpp"
#include "planet.cpp"
#include "Destructable.cpp"
#include "PowerUp.cpp"
#include "PowerUp_Speed.cpp"
#endif // SPACEGAME_H_INCLUDED
在我的每个文件的顶部,我(仅)包含了这个包含所有 .cpp 文件和标准包含的头文件。
但是,我有一个 Player/Ship 类,它给了我“重新定义 Ship 类”类型的错误。我最终通过在类定义文件中包含预处理器 #ifndef 和 #define 命令找到了一种解决方法:
#ifndef PLAYER_H
#define PLAYER_H
/** Player class that controls the flying object used for the space game */
#include "SpaceGame.h"
struct Bullet
{
float x, y;
float velX, velY;
bool isAlive;
};
class Ship
{
Ship(float sX,float sY, int w, int h, float velocity, int cw, int ch)
{
up = false; down = false; left = false; right = false;
angle = 0;
....
#endif
通过这种解决方法,我丢失了“类/结构重定义”错误,但它在我的类文件 PowerUp_Speed 中给了我需要 Ship 类的奇怪错误:
#include "SpaceGame.h"
class PowerUp_Speed : public PowerUp
{
public:
PowerUp_Speed()
{
texture = loadTexture("sprites/Planet1.png");
}
void boostPlayer(Ship &ship)
{
ship.vel += 0.2f;
}
};
我收到以下错误:“不完整类型 'struct Ship' 的使用无效”和“ 'struct ship' 的前向声明”
我相信这些错误的根源仍然是多个文件包含错误的问题。我描述了我为减少错误数量而采取的每一步,但到目前为止,我在 Google 上找到的所有帖子都没有帮助我,所以我礼貌地问你们是否有人可以帮助我找到问题和修复。