Ошибка необъявленного идентификатора в заголовочном файле, работает в файле cpp - PullRequest
0 голосов
/ 12 июня 2018

Я попытался решить эту проблему без удачи, так что, надеюсь, это не дубликат.

Я реализовал алгоритм поиска пути 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;

в этом заголовочном файле, это выдаст мне ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...