-1

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

4

2 回答 2

0

This kind of directive should not be in a header file

using namespace BWAPI;
于 2013-01-09T19:08:55.863 回答
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;

在寻路.h? 只需转发声明 ArgosMap、MapField、PathNode 和 Position 即可

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

pathfinding.h 看 Pathfinding 类的声明就足够了,如果需要实现 Pathfinding 方法,上面的东西应该去 pathfinding.cpp。标题中的内容和依赖项越少,调试就越容易。

pathfinding.h 中的声明看起来不错,问题是某些方法没有实现/没有正确实现。要找出这些方法是什么,您需要缩小问题的范围——从一开始就删除不必要的依赖项。

在不使用其他头文件的方法/方法的文件中包含 pathfinding.h 总是可以正常工作...

于 2013-01-09T19:23:35.420 回答