我正在尝试为!=运算符定义一个重载。我的代码如下。 (更新:过时的代码。如果两个文章指针中的一个指向NULL,则此代码将崩溃。)
bool ArticleContainer::ArticleIterator::operator!=(const ArticleIterator& artit) {
if (this->article == NULL && artit.article == NULL)
return false;
else if (this->article->GetID() != artit.article->GetID())
return true;
else if (this->article->GetName() != artit.article->GetName())
return true;
else
return false;
}
当我在第一行代码上放置断点时,我在调试器中看到了这一点。
this - 0x22fedc
artit - 无法创建变量对象
显然该功能无法访问artit
,因此崩溃了。我做错了什么?
修改:此处发出通话。
for (ArticleContainer::ArticleIterator art = cont.Begin(); art != cont.End(); art++) {
cout << art << "\n";
}
基本上,我会查看文章列表,直到遇到哨兵。
我刚刚在for循环之前测试了cont.End()
:
const ArticleIterator& End() const { return *tail; }
使用 tail :
Name : tail
Details:0x571900
编辑:operator ++代码如下:
void ArticleContainer::ArticleIterator::operator++(int i) {
this->article = this->next->article;
this->next = this->next->next;
}
答案 0 :(得分:1)
我认为代码的 intent 是错误的,但从技术上讲,你可以试试这个:
bool ArticleContainer::ArticleIterator::operator!=(const ArticleIterator& artit) {
if (article == NULL && artit.article == NULL)
return false;
if (article == NULL || artit.article == NULL)
return true;
if (article->GetID() != artit.article->GetID())
return true;
if (article->GetName() != artit.article->GetName())
return true;
return false;
}
但是,即使只考虑技术问题,我也宁愿用operator!=
来表达operator==
。
干杯&amp;第h。,
答案 1 :(得分:0)
bool ArticleContainer :: ArticleIterator :: operator!=(const ArticleContainer :: ArticleIterator&amp; artit);