Okay, so thats my error: 'Enemy' was not declared in this scope.The error is in the map.h file, even though map.h includes enemy.h as shown
#ifndef MAP_H_INCLUDED
#define MAP_H_INCLUDED
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "enemy.h"
#define MAX_TILE_TYPES 20
using namespace std;
class Map{
public:
Map();
void loadFile(string filename);
int** tile;
int** ftile;
bool solid[MAX_TILE_TYPES];
int width;
int height;
int tileSize;
vector<Enemy> enemies;
};
#endif // MAP_H_INCLUDED
And here is enemy.h
#ifndef ENEMY_H_INCLUDED
#define ENEMY_H_INCLUDED
#include "global.h"
#include "map.h"
class Enemy{
public:
Enemy();
Enemy(float nx, float ny, float nstate);
void update(Map lv);
bool rectangleIntersects(float rect1x, float rect1y, float rect1w, float rect1h, float rect2x, float rect2y, float rect2w, float rect2h);
void update();
float x;
float y;
Vector2f velo;
float speed;
float maxFallSpeed;
int state;
int frame;
int width;
int height;
int maxStates;
int *maxFrames;
int frameDelay;
bool facingLeft;
bool onGround;
bool dead;
int drawType;
};
#endif // ENEMY_H_INCLUDED
Anyone know whats going on and how to fix it?
enemy.h includes map.h
but, map.h includes enemy.h
So, if you include enemy.h, the processing will go something like this:
to fix this, remove #include "map.h" from enemy.h, and replace it with a forward declaration, class Map;
You will also need to modify void update(const Map& lv); -- use a const&
and include "map.h" in enemy.cpp
You need to remove one of the #include statements to break the circular reference. To allow the code to compile you can declare one of the included classes as just a simple definition
class Map;
in the top of the Enemy.hpp file, for example, and then include the header in the cpp file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With