我必须将windows-code重写为跨平台视图。这是一个例子:
std::unordered_set<Type>::iterator it = ...;
it._Ptr->_Myval->...
代码中的每个代码都有迭代器中的_Ptr
成员,但我在docs中找不到它。我认为它适用于visual studio(它是stl的实现)。任何想法如何取代它?什么是_Myval
?
UPD:
for(std::unordered_set<QuadTreeOccupant*>::iterator it = ...)
it->aabb;
class QuadTreeOccupant
{
public:
AABB aabb;
};
第it->aabb
行的错误:
错误:'*中成员'aabb'的请求 it.std :: __ detail :: _ Hashtable_iterator&lt; _Value,__ constant_iterators, __cache&GT; ::操作符 - &GT; _Value = qdt :: QuadTreeOccupant *,bool __constant_iterators = true,bool _ cache = false,std :: _detail :: _ Hashtable_iterator&lt; _Value,__ constant_iterators, __cache&gt; :: pointer = qdt :: QuadTreeOccupant * const *',属于非类型'qdt :: QuadTreeOccupant * const'
答案 0 :(得分:4)
这些是VC实现的unordered_map
的实现细节。您应该删除对_Ptr
和_Myval
的引用,并使用以下任一项:
it->
(*it).
取代it._Ptr->_Myval.
答案 1 :(得分:1)
至于更新:迭代器是“像元素的指针”,因此*it
引用包含的元素; 但,您无法使用it->
访问元素的成员,因为您的成员元素是一个指针,因此迭代器“就像”一个双指针。
长话短说,你必须这样做:
(*it)->aabb;
由于*it
为您提供了QuadTreeOccupant*
,然后您可以通过->
运营商访问其成员。
--- ---编辑
太晚了......
答案 2 :(得分:0)
_Ptr
看起来像一个你不应该访问的实现细节(即它应该是私有的),你不应该在任何情况下使用:名称以下划线开头,后跟一个除了明确邀请的人之外,大写字母对于每个人来说都是禁区。这些只是C ++系统的实施者(例如编译器和标准库编写者)。
您只想使用
it->...
(*it). ...
...访问迭代器的元素。