调试断言失败了!表达式列表迭代器不兼容

时间:2013-06-13 17:05:38

标签: c++ visual-studio-2010 assert visual-studio-debugging

我正在编写一个用C ++实现Dictionary(ADT)的作业。我最初在Xcode中编写程序,一切似乎都运行正常。然而,我最近发现平地机使用的是Visual Studio 2010,所以我试图确保我的代码在VS2010中也能正常工作....

我现在遇到的问题是在哈希表的remove()函数中。基本上,我使用列表向量并迭代列表来删除碰撞条目。但是现在当我尝试测试这个remove()函数时,我收到以下错误:debug assertion failed! expression list iterators incompatible。我尝试在断言上查看Visual C ++文档,看起来它应该工作....有什么我可以忽略的吗?

这是我的代码:

///**DELETE***////  
void remove(string key) {
    size_t index = hashString(key);
    list<Entry>& entry = table.at(index);
        for(typename list<Entry>::iterator it = entry.begin();
            it != entry.end();
            /**/)
        {
            if (it->data == key) {
                table[index].erase(it);
            } else
                it++;
        }
    //entry not found
    cout << "Error: Cannot Delete... No Such Entry"<< endl;
}

1 个答案:

答案 0 :(得分:2)

您怀疑是否忽略了erase的返回值。如果您将包含erase调用的行更改为此内容是否有效?

it = table[index].erase(it);

或者确实:

it = entry.erase(it);

请参阅此处list::erase的文档:

http://www.cplusplus.com/reference/list/list/erase