我试着把这个问题弄清楚没有运气,所以希望它不会重复。
我已经在基于SDL的图形"游戏"中为uni项目实现了A *寻路算法,您可以在其中选择起点和终点,算法会计算出路径和将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类,它在cpp文件中有实际的A *和游戏代码
#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;
在这个头文件中,它给了我错误。