0

我必须将 Windows 代码重写为跨平台视图。这是示例:

std::unordered_set<Type>::iterator it = ...;
it._Ptr->_Myval->...

每个代码中都有_Ptr迭代器中的成员,但我在文档中找不到它。我认为它适用于视觉工作室(它是 stl 的实现)。任何想法如何更换它?什么是_Myval


升级版:

for(std::unordered_set<QuadTreeOccupant*>::iterator it = ...)
   it->aabb;

class QuadTreeOccupant
{
   public:
      AABB aabb;
};

并且在线错误it->aabb

错误:在 '* it.std::__detail::_Hashtable_iterator<_Value, __constant_iterators, __cache>::operator-> 中请求成员 'aabb' _Value = qdt::QuadTreeOccupant*, bool __constant_iterators = true, bool _ cache = false, std:: _detail::_Hashtable_iterator<_Value, __constant_iterators, __cache>::pointer = qdt::QuadTreeOccupant* const*',属于非类类型'qdt::QuadTreeOccupant* const'</p>

4

3 回答 3

4

这些是unordered_map特定于 VC 实现的实现细节。您应该只删除对 and 的引用_Ptr_Myval使用以下任一:

  • it->
  • (*it).

代替it._Ptr->_Myval.

于 2012-02-09T00:09:14.727 回答
1

至于更新:迭代器“就像一个指针”指向元素,所以*it指的是包含的元素;但是,您不能使用 访问元素的成员it->,因为您的成员元素是指针,因此迭代器“类似于”双指针。

长话短说,你必须这样做:

(*it)->aabb;

因为*it给你一个QuadTreeOccupant*,然后你可以通过->运营商访问它的成员。

- -编辑 - -

太晚了...

于 2012-02-09T00:25:11.533 回答
0

看起来像是你不应该访问的_Ptr实现细节(即它可能应该是“私有的”)并且在任何情况下都不应该使用:以下划线开头并后跟大写字母的名称是禁止区域除了明确邀请的人之外的所有人。这些只是 C++ 系统的实现者(例如编译器和标准库编写者)。

你只想使用

it->...
(*it). ...

...访问迭代器的元素。

于 2012-02-09T00:11:08.743 回答