Сравнивать указатели мистически не удается в VC ++ - PullRequest
1 голос
/ 27 августа 2010

У меня есть древовидная структура, и я хочу найти все узлы, соответствующие заданным критериям. Каждый раз, когда я вызываю функцию поиска, она возвращает следующий соответствующий узел. Детей ищут с помощью рекурсивного вызова функции.

По какой-то причине ключевое сравнение указателей не удается для этой реализации. Пожалуйста, смотрите код ниже, я указал на неудачное сравнение.

HtmlTag* HtmlContent::FindTag(string tagName, string tagParameterContent)
{
    if (tagName.empty() && tagParameterContent.empty())
        return NULL;

    if (this->startTag == NULL)
        return NULL;

    this->findContinue = this->FindChildren(this->startTag, &tagName, &tagParameterContent);
    return this->findContinue;
}

HtmlTag* HtmlContent::FindChildren(HtmlTag* firstTag, string* tagName, string* tagParameterContent)
{
    HtmlTag* currentTag = firstTag;
    HtmlTag* childrenFound = NULL;

    while (currentTag != NULL)
    {
        if (!tagName->empty() && *tagName == currentTag->tagName)
        {
            if (tagParameterContent->empty() || currentTag->tagParameters.find(*tagParameterContent, 0) != -1)
            {
                if (this->findContinue == NULL)
                    break; // break now when found
                else if (this->findContinue == currentTag) // TODO why this fails?
                    this->findContinue == NULL; // break on next find
            }
        }

        if (currentTag->pFirstChild != NULL)
        {
            childrenFound = this->FindChildren(currentTag->pFirstChild, tagName, tagParameterContent);
            if (childrenFound != NULL)
            {
                currentTag = childrenFound;
                break;
            }
        }

        currentTag = currentTag->pNextSibling;
    }

    return currentTag;
}

Компилятор VC ++ принимает этот код, но по какой-то причине я не могу поставить точку останова в этом сравнении. Я думаю, что это оптимизировано, но почему? Почему это сравнение не удается?

1 Ответ

4 голосов
/ 27 августа 2010

Я думаю, что вы должны заменить == на = в назначении после сравнения.Компилятор оптимизировал весь этот раздел, потому что он не делает ничего полезного.

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