小编geo*_*erd的帖子

'矢量迭代器不兼容'

这个问题在SO上被多次询问,但答案不适用于我的情况,AFAICT.以下代码在命中时立即触发错误i != std::end(observers_);.

void VisualGeometry::SignalPopPointFlags(const Point_2r& p,
                                         const uint32_t msec_delay) const {
    for(auto i = std::begin(observers_); i != std::end(observers_); ++i)
        (*i)->SlotPopPointFlags(p, msec_delay);
}
Run Code Online (Sandbox Code Playgroud)

调查一下<vector>,以下内容会触发错误:

void _Compat(const _Myiter& _Right) const
{   // test for compatible iterator pair
    if (this->_Getcont() == 0
        || this->_Getcont() != _Right._Getcont())
        {   // report error
            _DEBUG_ERROR("vector iterators incompatible");
            _SCL_SECURE_INVALID_ARGUMENT;
        }
}
Run Code Online (Sandbox Code Playgroud)

因为我没有比较来自不同容器的迭代器,所以似乎第一次检查this->_Getcont() == 0可能是问题,但我不知道该怎么说.

如果我为vec.begin()/ vec.end()换掉begin(vec)/ end(vec),也会出现同样的问题.

关于如何发生这种情况,我有点迷茫.关于如何进行调试的任何建议?

VisualGeometry类旨在将接收到的信号转发到正在观看它的任何对象.以下是相关的代码段:

class VisualGeometry : public IGeometryObserver, public IObservableGeometry {
public:
    void SlotPushSegmentFlags(const Segment_2r& …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

4
推荐指数
1
解决办法
4940
查看次数

标签 统计

c++ ×1

iterator ×1

stl ×1