Ошибка параметра с перегрузкой оператора для! = - PullRequest
1 голос
/ 25 октября 2010

Я пытаюсь определить перегрузку для оператора! =.Мой код выглядит следующим образом. (Обновление: устаревший код. Если один из двух указателей статьи указывает на 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";
}

По сути, я хожу по списку статей, пока не сталкиваюсь со стражем.

Я только что проверил cont.End() прямо перед циклом for:

const ArticleIterator& End() const { return *tail; }

С хвостом :

Name : tail
    Details:0x571900

Редактировать : код оператора ++ выглядит следующим образом:

void ArticleContainer::ArticleIterator::operator++(int i) {
    this->article = this->next->article;
    this->next = this->next->next;
}

Ответы [ 2 ]

1 голос
/ 25 октября 2010

Я думаю, что намерение вашего кода неверно, но технически вы можете попробовать это:

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==.

Приветствия и hth.,

0 голосов
/ 25 октября 2010

bool ArticleContainer :: ArticleIterator :: operator! = (Const ArticleContainer :: ArticleIterator & artit);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...