Я попытался решить эту проблему без удачи, так что, надеюсь, это не дубликат.
Я реализовал алгоритм поиска пути A * для проекта uni в графической "игре" на основе SDL, в которойВы выбираете начальную и конечную точку, и алгоритм вычисляет путь и помещает в него вектор STL.
Проблема в том, что я могу без проблем объявить вектор в файле cpp, но мне нужно егобыть в заголовочном файле, потому что мне нужно повторно использовать его в других местах, но если я объявляю точно такой же вектор в заголовке, он говорит «необъявленный идентификатор», даже если я четко включил библиотеку, так как она работает в файле cpp.
Это класс MapSearchNode:
#ifndef MapSearchNode_hpp
#define MapSearchNode_hpp
#include "stlastar.h"
#include "map.hpp"
class MapSearchNode
{
public:
int x; // the (x,y) positions of the node
int y;
MapSearchNode() { x = y = 0; }
MapSearchNode( int px, int py ) { x=px; y=py; }
float GoalDistanceEstimate( MapSearchNode &nodeGoal );
bool IsGoal( MapSearchNode &nodeGoal );
bool GetSuccessors( AStarSearch<MapSearchNode> *astarsearch, MapSearchNode *parent_node );
float GetCost( MapSearchNode &successor );
bool IsSameState( MapSearchNode &rhs );
void PrintNodeInfo();
};
#endif
А это класс Game, в котором есть фактический A * и код игры в файле cpp
#ifndef Game_hpp
#define Game_hpp
#include <iostream>
#include <vector>
#include "SDL2/SDL.h"
#include "SDL2_image/SDL_image.h"
#include "textureManager.hpp"
#include "gameObject.hpp"
#include "map.hpp"
#include "MapSearchNode.hpp"
class Game{
public:
Game();
~Game();
void init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen);
void handleEvents();
void update();
void render();
void clean();
int gethRes(){return hRes;};
int getvRes(){return vRes;};
bool isRunning(){return running;};
static SDL_Renderer* renderer;
private:
int hRes = 640;
int vRes = 640;
bool running; //Se il gioco sta girando o no.
SDL_Window *window; //Finestra del gioco
const int startX = 4;
const int startY = 3;
const int endX = 19;
const int endY = 3;
};
#endif /* Game_hpp */
Если я попытаюсь объявить:
std::vector<MapSearchNode*> directions;
в этом заголовочном файле, это выдаст мне ошибку.