这个问题在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)