Driver::~Driver()
{
AutoCritSec acsDriverList(m_csDriverList,true);
DRIVERLIST::iterator it = m_DriverList.begin();
for(;it!=m_DriverList.end();it++)
{
if (it->second == this)
{
m_DriverList.erase(it);
it = m_DriverList.begin();
}
}
}
visual studio 2003에서 프로그램을 컴파일 할 때 프로그램이 잘 작동합니다. 하지만 난 2010 년에 동일한 작업을 수행 할 때 응용 프로그램을 종료 한 후 동안, 나는map/iterator가 incrementablemap이 아니거나 iterator가 증가하지 않음을 설정합니다.
Expression:map/set iterator not incrementable
같은 몇 가지 오류가 발생하고 난이 무시 누를 때 나는
Expression:"standard c++ library out of range" && 0
어떤 일이 무엇인지 어떤 생각을 가지고 있습니까 얻을 여기서 진행 : 나는 누구에게나 제안에 대해 극도로 빚을 질 것이다. 감사와 따뜻한 소망의 톤.
좋은 추천/제거합니다. 이 특별한 경우 m_DriverList는 분명히 쌍의 컨테이너이거나 테스트가 두 번째로 있기 때문에 어떤 종류의 맵입니다. std :: remove 대신 lambda 또는 비교 함수를 사용하여 std :: remove_if가 필요합니다. –
컨테이너가 맵 (질문 제목, 'second second' 멤버에 대한 액세스) 인 경우에는 지우기 - 제거 * 이디엄을 적용 할 수 없다고 생각합니다. 관용구는 while 루프와 비슷하지만 반복을 다시 시작하는 대신 이터레이터를 복사하고 앞으로 이동 한 다음 현재 위치를 지 웁니다. –
@ DavidRodríguez-dribeas @MarkTaylor : 좋은 캐치; 나는 변수 이름에서 "List"에 정신이 산만했다. C++ 11에서,'erase'는 반복자를 다음 요소 (또는 다음 요소가 없다면 한쪽 끝까지)로 반환하고, Visual C++ 2010은이를 지원합니다. –