CPP包含头文件导致成千上万的错误

CPP include header file results in thousands of errors

本文关键字:成千上万 错误 包含头 文件 CPP      更新时间:2023-10-16

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

这种指令不应该出现在头文件

using namespace BWAPI;

首先,为什么你需要这些

#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类的声明,如果需要实现寻路方法,上面的内容应该放到Pathfinding .cpp中。头文件中的内容和依赖项越少,调试起来就越容易。

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

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