решаемые
Что действительно помогло мне, так это то, что я мог # включать заголовки в .cpp файл, вызывая переопределенную ошибку.
Я новичок в С++, но у меня есть некоторый опыт программирования на С# и Java, поэтому я могу пропустить что-то основное, уникальное для С++.
Проблема в том, что я действительно не знаю, что неправильно, я вставлю код, чтобы попытаться объяснить проблему.
У меня есть три класса, GameEvents, Physics и GameObject. У меня есть заголовки для каждого из них. GameEvents имеет одну физику и список GameObjects. Физика имеет список GameObjects.
То, что я пытаюсь достичь, - это то, что я хочу, чтобы GameObject мог иметь доступ к физическому объекту или иметь его.
Если я просто #include "Physics.h" в GameObject, я получаю "ошибка C2111:" ClassXXX ": переопределение типа" класс ", которое я понимаю. И вот где я думал, что # include-guards поможет, поэтому я добавил включенную защиту для моего Phys.h, так как заголовок, который я хочу включить дважды.
Вот как выглядит
#ifndef PHYSICS_H
#define PHYSICS_H
#include "GameObject.h"
#include <list>
class Physics
{
private:
double gravity;
list<GameObject*> objects;
list<GameObject*>::iterator i;
public:
Physics(void);
void ApplyPhysics(GameObject*);
void UpdatePhysics(int);
bool RectangleIntersect(SDL_Rect, SDL_Rect);
Vector2X CheckCollisions(Vector2X, GameObject*);
};
#endif // PHYSICS_H
Но если я # включил "Physics.h" в свой GameObject.h сейчас вот так:
#include "Texture2D.h"
#include "Vector2X.h"
#include <SDL.h>
#include "Physics.h"
class GameObject
{
private:
SDL_Rect collisionBox;
public:
Texture2D texture;
Vector2X position;
double gravityForce;
int weight;
bool isOnGround;
GameObject(void);
GameObject(Texture2D, Vector2X, int);
void UpdateObject(int);
void Draw(SDL_Surface*);
void SetPosition(Vector2X);
SDL_Rect GetCollisionBox();
};
Я получаю несколько проблем, которые не понимают, почему они появляются. Если я не #include "Physics.h" , мой код работает нормально.
Я очень благодарен за любую помощь.