2013-01-09 38 views
-1

的头文件,结果当我有这个头文件 “pathfinding.h”:CPP包括数以千计的错误

#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不这样做?

+1

编译器永远是对的。你确实有这些错误,至多你并没有意识到你的错误。 – 2013-01-09 19:07:27

+0

没有把错误的文字放在任何人的帮助下几乎是不可能的。 – StilesCrisis

+0

查看报告的* first *错误或最早一行中的错误(有时可能会错误地报告错误)或第一个* syntax *错误。语法错误尤其可能会混淆编译器并导致其他错误的级联。 –

回答

0

这种指令的不应该是在头文件中

using namespace BWAPI; 
+2

同意,但您认为这是问题的原因吗? –

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和位置类似

class ArgosMap; 
class MapField; 
class PathNode; 
class Position; 

是足够的pathfinding.h看着寻路类的声明,在上面的东西应该去pathfinding.cpp是否有必要实施寻路方法。你在头文件中的东西和依赖关系越少,调试就越容易。

pathfinding.h中的声明看起来很好,问题在于某些方法未实现/未正确实现。要找出这些方法是什么,您需要缩小问题的范围 - 通过消除不必要的依赖关系开始。

,包括不使用它的方法/从其他头的方法包括将始终正常工作文件pathfinding.h ...

+0

奇怪的是,它也适用于其他文件,我也需要pathfinding.h并需要相同的方法。 – user1949422

+0

这是我想提到的另一件事 - 在UnitAgent.h头文件的任何地方都没有使用类Pathfinding,所以问题应该放在Pathfinding顶部的其中一个头文件中。重构代码以在头文件中包含尽可能少的依赖关系会使读取代码和查找这些类型的错误更容易。正如有人在上面的评论中提到的那样,没有编译器错误,不可能找出究竟是什么错误...... –