运算符重载参数问题!=

时间:2010-10-25 16:17:48

标签: c++ operator-overloading

我正在尝试为!=运算符定义一个重载。我的代码如下。 (更新:过时的代码。如果两个文章指针中的一个指向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;
}

2 个答案:

答案 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);