Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CPP include头文件导致数千个错误_C++_Header - Fatal编程技术网

C++ CPP include头文件导致数千个错误

C++ CPP include头文件导致数千个错误,c++,header,C++,Header,当我包含此头文件“pathfinding.h”时: #pragma一次 #包括 #包括“BWAPI/TilePosition.h” #包括 #包括“PathNode.h” #包括“Logger.h” #包括“ArgosMap.h” #包括“MapField.h” #包括“Utils.h” #包括“ComparePathNodePainter.h” 使用名称空间BWAPI; 类寻路{ 私人: 向量开放列表; std::向量闭合列表; std::向量构建路径(路径节点*目标节点); void exp

当我包含此头文件“pathfinding.h”时:

#pragma一次
#包括
#包括“BWAPI/TilePosition.h”
#包括
#包括“PathNode.h”
#包括“Logger.h”
#包括“ArgosMap.h”
#包括“MapField.h”
#包括“Utils.h”
#包括“ComparePathNodePainter.h”
使用名称空间BWAPI;
类寻路{
私人:
向量开放列表;
std::向量闭合列表;
std::向量构建路径(路径节点*目标节点);
void expandNode(路径节点*当前节点,映射字段*目标字段);
ArgosMap*ArgosMap;
公众:
寻路();
~Pathfinding();
std::vector getShortestPath(MapField*startField,MapField*targetField);
};
在该头文件“UnitAgent.h”中:

#pragma一次
#包括
#包括
#包括“ArgosMap.h”
#包括“寻路.h”
使用名称空间BWAPI;
类统一剂{
受保护的:
单位*单位;
单位类型单位类型;
国际统一组织;
std::矢量跟踪;
定位目标;
公众:
统一代理(单位*单位);
std::vector getTrail();
位置getTarget();
Position*getPosition();
int getUnitID();
无效设置目标(位置目标);
void addPositionToTrail(位置*目标位置);
无效移动到(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来说已经足够了。查看pathfinding类的声明,如果需要实现pathfinding方法,那么上面的内容应该转到pathfinding.cpp。标题中的内容和依赖项越少,调试就越容易

h中的声明看起来不错,问题是一些方法没有实现/没有正确实现。要了解这种方法是什么,您需要缩小问题的范围——首先删除不必要的依赖项


在不使用pathfinding.h方法的文件中包含pathfinding.h,或者在包含的其他头文件中包含pathfinding.h,这样做总是很好的…

编译器总是正确的。你确实有这些错误,最多你没有意识到你有。如果不输入错误文本,任何人都几乎不可能提供帮助。请查看报告的第一个错误,或最早一行的错误(有时错误可能会无序报告),或第一个语法错误。语法错误尤其会使编译器感到困惑,并导致其他错误的级联。@H2CO3:严格来说,s/always right/*几乎*always right/。但是,如果没有非常有力的证据,您不应该假设编译器错误。“我知道我的代码是正确的”不是有力的证据。@KeithThompson这不是问题:)同意,但你认为这是问题的原因吗?奇怪的是,它也适用于其他文件,其中我还需要pathfinding.h,并且需要相同的方法。这是我想提到的另一件事-在头UnitAgent.h中的任何地方都没有使用类寻路,所以问题应该在寻路顶部的一个头中。重构代码以在标题中包含尽可能少的依赖项将使阅读代码和查找这些类型的错误变得更加容易。正如上面评论中提到的,如果没有编译器错误,就不可能找出到底是什么错误。。。
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;
class ArgosMap;
class MapField;
class PathNode;
class Position;