C++ 为什么会有";向量迭代器不兼容“;错误仅在调试模式下发生?

C++ 为什么会有";向量迭代器不兼容“;错误仅在调试模式下发生?,c++,debugging,vector,runtime-error,C++,Debugging,Vector,Runtime Error,我注意到,当我试图比较一个向量的两个不同副本时,出现了一个“向量迭代器不兼容”错误 关于此错误,有足够多的问题可以找到解决方法: 我的问题是:是否可以禁用签入调试或启用签入版本以使两种配置的行为相同 我的问题不是:错误的含义、原因或解决方法 其他详细信息 在调试模式下,我的编译器选项包括: /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /

我注意到,当我试图比较一个向量的两个不同副本时,出现了一个“向量迭代器不兼容”错误

关于此错误,有足够多的问题可以找到解决方法:




我的问题是:是否可以禁用签入调试或启用签入版本以使两种配置的行为相同

我的问题不是:错误的含义、原因或解决方法


其他详细信息

在调试模式下,我的编译器选项包括:

/ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\test.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue 
在释放模式下:

/Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Release\test.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue 
下面是重现错误的一小段代码:

#include <vector>
#include <iostream>
#include <string>

using namespace std;

class foo{
    public:
        const std::vector<int> getVec(){return myVec;} //other stuff omitted

    private:
        std::vector<int> myVec;
};

int main(int argc, char* argv[])
{
    foo myFoo = foo();

    std::vector<int>::const_iterator i = myFoo.getVec().begin();
    while( i != myFoo.getVec().end())
    {
       //do stuff
       ++i;
    }

    string s;
    cin >> s;

    return 0;
}
#包括
#包括
#包括
使用名称空间std;
福班{
公众:
const std::vector getVec(){return myVec;}//省略了其他内容
私人:
std::载体myVec;
};
int main(int argc,char*argv[])
{
foo myFoo=foo();
std::vector::const_迭代器i=myFoo.getVec().begin();
而(i!=myFoo.getVec().end())
{
//做事
++一,;
}
字符串s;
cin>>s;
返回0;
}

我自由地对问题进行了重大编辑,以更清楚地反映其含义。如果您觉得这并不能使事情变得更好,请随时恢复编辑。简短的回答是:可以使用宏在任一模式(调试/发布)下启用或禁用检查。(当问题结束时,较长的答案丢失)。@BoPersson当我们处于调试模式(_ITERATOR_debug_LEVEL=0)时,它可以隐藏错误,但在发布模式(_ITERATOR_debug_LEVEL=2)时,我们不能做相反的事情。我们得到一个错误C1189:_ITERATOR_DEBUG_LEVEL>1在发布模式下不受支持。