-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 を取得します。しかし、それは真実ではありません。エラーは存在しません。ヘッダーファイルを別のファイルに含めると、すべて問題ありません(特定のヘッダーファイルを必要とするものを除いて)。

私がチェックすべきアイデア。Eclipse が Java コードをチェックする方法で、C++ コードをチェックする方法を考えている人。つまり、なぜVisual Studioはそれをしないのですか?

4

2 に答える 2

0

この種のディレクティブはヘッダー ファイルに含めるべきではありません

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;

pathfinding.h で? ArgosMap、MapField、PathNode、および Position を次のように宣言するだけです

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

Pathfinding クラスの宣言を見ると、pathfinding.h で十分です。Pathfinding メソッドの実装に必要な場合は、上記のものを pathfinding.cpp に移動する必要があります。ヘッダーに含まれるものと依存関係が少ないほど、デバッグが容易になります。

pathfinding.h の宣言は問題ないように見えますが、問題は、一部のメソッドが実装されていないか、正しく実装されていないことです。このメソッドが何であるかを調べるには、まず不要な依存関係を削除して、問題の範囲を狭める必要があります。

そのメソッド/含まれている他のヘッダーのメソッドを使用しないファイルに pathfinding.h を含めると、常に正常に動作します...

于 2013-01-09T19:23:35.420 に答える