2016-01-02 1 views
-2

Это фрагмент кода вызывает сбой:Создание строки из wstring вызывает «строка итераторы несовместимыми» утверждают

for (m_tracksVectorIterator = m_tracksVector.begin(); m_tracksVectorIterator != m_tracksVector.end(); ++m_tracksVectorIterator) 
{ 
    std::string displayString(m_tracksVectorIterator->GetDisplayName().begin(), m_tracksVectorIterator->GetDisplayName().end()); 

    .... 
} 

Из того, что я читал до сих пор утверждают, причиняется путем сравнения 2 несовместимых строк, однако, в моем случае причиной является создание новой строки.

m_tracksVectorIterator->GetDisplayName() 

возвращает std :: wstring, с которого я пытаюсь создать строку std ::. Я нашел этот метод, чтобы сделать это где-то еще здесь, но строка заставляет мою программу бросать утверждение каждый раз.

Любые советы?

+0

Выполняется ли 'm_tracksVectorIterator-> GetDisplayName()' return by value? – LogicStuff

+1

Мы можем только догадываться, если вы не предоставляете MCVE. – LogicStuff

ответ

1

Два итератора не относятся к одной и той же последовательности, потому что два вызова GetDisplayName() возвращают два разных объекта. Если бы вы предоставили минимальный пример, вы бы нашли эту проблему самостоятельно.

+0

Откуда вы знаете наверняка? – LogicStuff

+0

Это единственное разумное объяснение для получения ошибки времени выполнения в этот момент. –

Смежные вопросы