当我包含此头文件“pathfinding.h”时:
#pragma once
#include <BWAPI.h>
#include "BWAPI/TilePosition.h"
#include <vector>
#include "PathNode.h"
#include "Logger.h"
#include "ArgosMap.h"
#include "MapField.h"
#include "Utils.h"
#include "ComparePathNodePointer.h"
using namespace BWAPI;
class Pathfinding {
private:
std::vector<PathNode*> openList;
std::vector<PathNode*> closedList;
std::vector<Position*> buildpath(PathNode* targetNode);
void expandNode(PathNode* currentNode, MapField* targetField);
ArgosMap* argosMap;
public:
Pathfinding();
~Pathfinding();
std::vector<Position*> getShortestPath(MapField* startField, MapField* targetField);
};
在此标题文件“UnitAgent.h”中:
#pragma once
#include <BWAPI.h>
#include <vector>
#include "ArgosMap.h"
#include "Pathfinding.h"
using namespace BWAPI;
class UnitAgent {
protected:
Unit* unit;
UnitType unitType;
int unitID;
std::vector<Position*> trail;
Position target;
public:
UnitAgent(Unit* unit);
std::vector<Position*> getTrail();
Position getTarget();
Position* getPosition();
int getUnitID();
void setTarget(Position target);
void addPositionToTrail(Position* targetLocation);
void moveTo(TilePosition* targetPosition);
};
我得到的一百万个错误主要是错误C2143,C2065。但那不是真的,错误不存在。当我将头文件包含在另一个文件中时,它完全没问题(除了需要特定头文件的东西之外)。
任何想法我应该检查。任何人都知道如何检查我的C ++代码,Eclipse检查我的java代码。我的意思是为什么Visual Studio不这样做?
答案 0 :(得分:0)
这种指令不应该在头文件中
using namespace BWAPI;
答案 1 :(得分:0)
首先,你为什么需要这一切
#include <BWAPI.h>
#include "BWAPI/TilePosition.h"
#include <vector>
#include "PathNode.h"
#include "Logger.h"
#include "ArgosMap.h"
#include "MapField.h"
#include "Utils.h"
#include "ComparePathNodePointer.h"
using namespace BWAPI;
在pathfinding.h中?只需向前声明ArgosMap,MapField,PathNode和Position
class ArgosMap;
class MapField;
class PathNode;
class Position;
对于pathfinding.h来说足以查看Pathfinding类的声明,如果有必要实现Pathfinding方法,那么上面的内容应该转到pathfinding.cpp。标题中的内容和依赖项越少,调试就越容易。
在pathfinding.h中声明看起来很好,问题是某些方法未实现/未正确实现。要找出这些方法是什么,您需要缩小问题的范围 - 通过删除不必要的依赖项开始。
在不使用它的文件中包含pathfinding.h包含其他标题的方法/方法总能正常工作......