Недавно я столкнулся с ошибками включения нескольких файлов. Я работаю над космической аркадной игрой и разделил свои классы/объекты на разные файлы .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, не помог мне, поэтому я вежливо спрашиваю, может ли кто-нибудь из вас помочь мне найти источник ошибки. проблемы и исправление.