У меня есть древовидная структура, и я хочу найти все узлы, соответствующие заданным критериям. Каждый раз, когда я вызываю функцию поиска, она возвращает следующий соответствующий узел. Детей ищут с помощью рекурсивного вызова функции.
По какой-то причине ключевое сравнение указателей не удается для этой реализации. Пожалуйста, смотрите код ниже, я указал на неудачное сравнение.
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 ++ принимает этот код, но по какой-то причине я не могу поставить точку останова в этом сравнении. Я думаю, что это оптимизировано, но почему? Почему это сравнение не удается?