我尝试运行此代码时遇到问题
void MyClass::setUp(){
list->clear();
Iterator i = ctr.getAll().iterator();
while (i.valid()) {
list->addItem(QString::fromStdString(i.elem().getNr()));
i.next();
}
}
当我退出函数时,会发生错误:
我正在尝试遍历自定义列表
Iterator类是这样的:
void Iterator::first(){
while (pos < ht.nrElem && ht.list[pos] == nullptr)
pos++;
if (pos < ht.nrElem)
current = ht.list[pos];
}
Iterator::Iterator(const HashTable & ht): ht { ht }{
pos = 0;
first(); // current will refer the first element of the list
}
void Iterator::next(){
current = current->getNext();
if (current == nullptr) {
pos++;
first();
}
}
bool Iterator::valid(){
return (pos < ht.nrElem) && (current != nullptr);
}
Car& Iterator::elem() const{
return current->getCar();
}
最佳答案
一方面,Iterator::first
以及构造函数都不必初始化current
。其次,在Iterator::Iterator(const HashTable & ht): ht { ht }
中,这是否意味着Iterator具有成员ht
,并且该参数也称为ht
?这是一个坏习惯。永远不要调用与类字段同名的成员函数参数。
关于c++ - C++调试断言失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37440057/