Моя функция должна проверять однаковы ли два компонента. Но она всегда false возвращает. Я думаю проблема в этой строчке:
if (!test1->equals(test2->child(childIndex)))
но я не знаю как ее по другому переписать
Функция
bool Test::equals(const Component* comp) const
{
const Test* test1 = dynamic_cast<const Test*>(this);
const Test* test2 = dynamic_cast<const Test*>(comp);
if ((test1 != nullptr) && (test2 != nullptr))
{
if (test1->name() != test2->name())
return false;
if (test1->numChildren() != test2->numChildren())
return false;
for (decltype(test1->numChildren()) childIndex = 0; childIndex < test1->numChildren(); ++childIndex)
{
if (!test1->equals(test2->child(childIndex)))
return false;
}
return true;
}
return false;
}
Что именно и как вы собираетесь сравнивать - это у вас надо спрашивать. Что вы сейчас сравниваете - то вам ваша функция и возвращает.
Смущает часть, где вы переходите к просмотру неких test2->child(childIndex)
, но при этом все равно сравниваете всех их с test1
. Мое гадание на кофейной гуще подсказывает мне, что раз уж вы c правой стороны перешли к test2->child(childIndex)
, то и с левой стороны надо было бы перейти к test1->child(childIndex)
if (!test1->child(childIndex)->equals(test2->child(childIndex)))
return false;
Однако возникает вопрос: а значение какого типа у вас возвращает эта функция child()
? Подозреваю, что так просто все не получится и именно поэтому вы "не знаете как ее по другому переписать".
Вот это
const Test* test1 = dynamic_cast<const Test*>(this);
является бессмысленным dynamic_cast
, т.е. это пустая операция, эквивалентная
const Test* test1 = this;
Умный компилятор, принимая во внимание пункт 2, может выкинуть проверку
if ((test1 != nullptr) && ...
из первого if
, т.к. this
никогда не может быть нулевым указателем. Поэтому если у вас test1->child(childIndex)
может вернуть нулевой указатель, то не надейтесь, что эта проверка вас защитит.
if (!test1->child(childIndex)->equals(test2->child(childIndex)))
return false;
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создать комплект из3-х совместно работающих исполняыемых модулей (exe) a
Есть 2 класса А и В нужно создать контейнер отдельно для каждого класса через метод create который template котрый заполняет контейнер типом в зависимости...