Почему ошибка «Vector Iterators Incompatible» возникает только в режиме отладки? - PullRequest
0 голосов
/ 07 июня 2018

Я заметил, что у меня появляется ошибка "Vector Iterators Incompatible", когда я пытаюсь сравнить две разные копии вектора.

Существует достаточно вопросов об этой ошибке, чтобы найти способ ее устранения:

Почему я получаю «несовместимые векторные итераторы»?
C ++ STLнесовместимые векторные итераторы
Утверждение отладки: несовместимые векторные итераторы (C ++)
несовместимые векторные итераторы

Мой вопрос: можно ли отключить проверку в отладке или включить проверку в выпуске, чтобы обе конфигурации вели себя одинаково?

Мой вопрос НЕ: Что означает ошибка, чтопричины или способы ее устранения.


Дополнительные сведения

Мои параметры компилятора в режиме отладки:

/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;
}
...