Странная вещь в этой проблеме заключается в том, что другие файлы .cpp и .h могут найти файл, но не этот, все они находятся в той же папке.Моя файловая структура выглядит следующим образом:
/ Entity.h // включается
/ Graphics.cpp // может включать
/ Graphics.h // НЕ МОЖЕТ включать
/ main.cpp // может включать
/ Physics.cpp // может включать
/ Physics.h // может включать
Графика.cpp, main.cpp, Physics.cpp, Physics.h могут включать Entity.h, но Graphics.h не может.
Это Entity.h
#ifndef ENTITY_H
#define ENTITY_H
#include <vector>
#include <SFML/Graphics.hpp>
using namespace std;
struct entity
{
int ID;
vector<long double> position;
vector<long double> velocity;
vector<long double> acceleration;
sf::Color colour;
sf::CircleShape selfImage;
long double mass;
};
entity createEntity(long double x, long double y, long double xV, long double yV, long double m, int newID)
{
entity e;
// assign entity ID and increment entity ID count
e.ID = newID;
// initialise velocity, acceleration & position to 0
e.position.resize(2, 0);
e.velocity.resize(2, 0);
e.acceleration.resize(2, 0);
e.position = {x, y};
e.velocity = {xV, yV};
// setup self-image
e.colour = sf::Color (255, 0, 0);
e.selfImage.setFillColor(e.colour);
// initialise mass
e.mass = m;
return e;
};
#endif // ENTITY_H
Это Graphics.h
/*
* Graphics.h
*
* Created on: 26 Mar 2019
* Author: chris
*/
#ifndef GRAPHICS_H_
#define GRAPHICS_H_
#include <SFML/Graphics.hpp>
#include <vector>
#include <Entity.h>
class Graphics
{
public:
Graphics(int WIDTH, int HEIGHT);
~Graphics();
void update(vector<entity> entities);
int W_WIDTH;
int W_HEIGHT;
sf::RenderWindow window;
};
#endif /* GRAPHICS_H_ */
Physics.h, пример чего-то, что может включать Entity.h
#ifndef PHYSICS_H
#define PHYSICS_H
#include <Entity.h>
#include <vector>
using namespace std;
class Physics
{
long double G_CONST = 0.00000000006674;
public:
Physics();
virtual ~Physics();
const int MAP_WIDTH = 1000;
const int MAP_HEIGHT = 1000;
vector<vector<entity*>> gameMap;
vector<entity> entityList;
void addEntity(entity e);
int update();
protected:
private:
};
#endif // PHYSICS_H
Вывод консоли следующий
make all
Building file: ../Graphics.cpp
Invoking: Cross G++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Graphics.d" -MT"Graphics.o" -o "Graphics.o" "../Graphics.cpp"
In file included from ../Graphics.cpp:7:
../Graphics.h:12:10: fatal error: ./Entity.h: No such file or directory
#include <./Entity.h>
^~~~~~~~~~~~
compilation terminated.
make: *** [subdir.mk:26: Graphics.o] Error 1
"make all" terminated with exit code 2. Build might be incomplete.
Я использую Eclipse в Debian.Это меня озадачило, я не вижу разницы в файлах.
РЕДАКТИРОВАТЬ: использование "" вместо <> вокруг имени файла включаемых операторов решило проблему.Однако возникли другие проблемы: (((((((