CPP包含头文件会导致数千个错误

时间:2013-01-09 19:05:17

标签: c++ header

当我包含此头文件“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不这样做?

2 个答案:

答案 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包含其他标题的方法/方法总能正常工作......