我有一个如下所示的 C++ 文件。
// 用于文本调试 #包括 #包括 //#包括 #包括 // stl 包括 #包括 #包括 #包括 // 快速固定大小内存分配器,用于快速节点内存管理 #包括“fsa.h” // 可以禁用固定大小的内存分配器来比较性能 // 如果你关闭它,则使用 std new 和 delete #define USE_FSA_MEMORY 1 // 禁用调试信息有被截断行的警告 // 出现在 stl 头文件中 #pragma 警告(禁用:4786) // AStar 搜索类。UserState 是用户状态空间类型 模板类 AStarSearch { 上市: // 数据 枚举{ SEARCH_STATE_NOT_INITIALISED, SEARCH_STATE_SEARCHING, SEARCH_STATE_SUCCEEDED, SEARCH_STATE_FAILED, SEARCH_STATE_OUT_OF_MEMORY, SEARCH_STATE_INVALID }; // 一个节点代表搜索中的可能状态 // 用户提供的状态类型包含在此类型中 上市: 类节点{ 上市: 节点*父;// 在搜索过程中用于记录后继节点的父节点 节点 *child; // 用于搜索应用程序后查看反向搜索 浮动 g; // 这个节点的成本 + 它的前辈(迄今为止的成本) 浮动 h; // 到目标距离的启发式估计(启发式估计) 浮动 f; // 前辈和自我和启发式的累积成本之和(costSoFar + 启发式估计)。 节点(): 父母(0),孩子(0),g(0.0f),h(0.0f),f(0.0f){ } 用户状态 m_用户状态; }; // 为了对堆进行排序,STL 需要比较函数来让我们进行比较 // 两个节点的 f 值 类堆比较_f { 上市: bool operator()(const Node *x, const Node *y) const { // 总启发式估计比较。 返回 x->f > y->f; } }; 上市: // 方法 // 构造函数只是初始化私有数据 AStarSearch(int MaxNodes = 1000); // 随时调用取消搜索并释放所有内存 无效的取消搜索(); // 设置开始和目标状态 无效 SetStartAndGoalStates(UserState &Start, UserState &Goal) ; // 使搜索前进一步 无符号 int SearchStep() ; // 用户调用它来将后继者添加到后继者列表中 // 扩展搜索边界时 bool AddSuccessor(UserState &State) ; // 释放解节点 // 这样做是为了在你完成后清理所有使用的节点内存 // 搜索 无效的自由解决方案节点(); // 遍历解的函数 // 获取起始节点 用户状态 *GetSolutionStart() ; // 获取下一个节点 用户状态 *GetSolutionNext() ; // 获取结束节点 用户状态 *GetSolutionEnd() ; // 向后步进解决方案迭代器 用户状态 *GetSolutionPrev() ; // 对于教育用途和调试,能够查看很有用 // 每一步的打开和关闭列表,这里有两个函数允许这样做。 用户状态 *GetOpenListStart() ; UserState *GetOpenListStart(float &f, float &g, float &h) ; 用户状态 *GetOpenListNext() ; UserState *GetOpenListNext(float &f, float &g, float &h) ; 用户状态 *GetClosedListStart() ; UserState *GetClosedListStart(float &f, float &g, float &h) ; 用户状态 *GetClosedListNext() ; UserState *GetClosedListNext(float &f, float &g, float &h) ; // 获取步数 int GetStepCount() ; 无效的 EnsureMemoryFreed() ; 私人的: // 方法 // 当搜索失败或被取消以释放所有已使用的时调用 // 记忆 无效 FreeAllNodes() ; // 此调用由搜索类在搜索结束时进行。可能有很多节点 // 搜索结束时仍然存在的创建。他们将被删除 // 搜索结束后的例程 无效 FreeUnusedNodes() ; // 节点内存管理 节点 *AllocateNode() ; 无效自由节点(节点*节点); 私人的: // 数据 // 堆(简单向量,但用作堆,参见 Steve Rabin 的游戏 gems 文章) std::vector m_OpenList; // 封闭列表是一个向量。 std::vector m_ClosedList; // Successors 是一个由用户填写的向量,每个节点的后继类型 // 被生成 std::vector m_Successors; // 状态 无符号整数 m_State; // 计算步数 诠释 m_Steps; // 开始和目标状态指针 节点 *m_Start; 节点 *m_Goal; // 用于支持遍历解决方案链的指针。 节点 *m_CurrentSolutionNode; #if USE_FSA_MEMORY // 记忆 FixedSizeAllocator m_FixedSizeAllocator; #万一 //调试:需要保留这两个迭代器 // 用于用户 Dbg 函数 类型名 std::vector::iterator iterDbgOpen; 类型名 std::vector::iterator iterDbgClosed; // 调试:计算内存分配和空闲 int m_AllocateNodeCount; 布尔 m_CancelRequest; };
我无法编译它;我得到的错误是:
字段的类型“UserState”不完整
我怎样才能解决这个问题?