无法在Mac上访问std vector iterator _Ptr

时间:2017-04-28 16:27:28

标签: c++ pointers vector iterator std

在Visual Studio上,这段代码就像魅力一样:

auto child = node.childs.begin();
    while (child != node.childs.end()) {
        vector<int> siblings;
        for (auto it : node.childs){
            if (it != *child._Ptr)siblings.push_back( it );
        }
        if (CheckSomething( tree, *child._Ptr, siblings ) > 0) {
            //delete that child
            child = node.childs.erase( child );
        }
        else ++child;
    }

但是在XCode上使用相同的代码我遇到了_Ptr不存在的错误?是不是具有相同结构的std库?为什么会这样?

File.cpp:1745:22: No member named '_Ptr' in 'std::__1::__wrap_iter<int *>'

提前致谢

2 个答案:

答案 0 :(得分:1)

规范没有定义这样的成员变量。 _Ptr是特定于实现的(在本例中为特定于MSVC的)成员变量,在其他实现中可能存在也可能不存在。

通常,以下划线开头的名称是指特定于实现的成员。如果您希望您的代码可以移植或不在编译器版本之间中断,那么就不要访问它们。

答案 1 :(得分:0)

确切地说,它不是同一个库。通过访问VS中的_Ptr,您依赖于实现行为,可以随时更改,包括更新VS时。

我不知道_Ptr是什么(记住:那个实现是定义的,应该永远不会被访问过,所以可能没有记录),但看看std::vector(如果是类型的话) node.childs),看看你是否能找到与_Ptr完全相同的东西。

根据经验,不要使用以一个或两个下划线开头的名称。