я получил неприятности undertanding следующее сообщение об ошибке:Почему это возвращает const const const const const const внутри метода const?
Error 1 error C2440: '=' : cannot convert from 'const X<...> *const ' to 'X<...> *const '
Я пытаюсь использовать указатель на константный указатель для отслеживания узла во время обхода дерева:
bool IsValid() const
{
X* const* previousNode = new X*;
return this->IsValid(previousNode);
}
bool IsValid(X* const* previousNode) const
{
...
if (!*previousNode)
*previousNode = this; // Error
...
return true;
}
Почему это является const X * const тип и не может использоваться как * Const *?
Как метод метод const, я понимаю, что он защищает сам объект от модификации. Тогда почему компилятор пытается обеспечить постоянство указателя на указатель, возвращающий это?
Я не смог найти ответ на этот вопрос, используя поисковую систему переполнения стека.
Благодарим за ответы.
Вот финалом код, который я, наконец, используется, если я могу быть польза для кого-то:
bool IsValid() const
{
std::unique_ptr<const BST*> previousNode = std::unique_ptr<const BST*>(new const BST*);
*previousNode = nullptr;
return this->IsValid(prevNode);
}
bool IsValid(std::unique_ptr<const BST*>& previousNode) const
{
// Recurse on left child without breaking if not failing
if (this->leftChild &&!this->leftChild->IsValid(previousNode))
return false;
// First node retrieved - assign
if (!*previousNode)
*previousNode = this;
// Previous data does not compare well to the current one - BST not valid
else if (!Compare()((*previousNode)->data, this->data))
return false;
// Set current node
*previousNode = this;
// Recurse on right child
if (this->rightChild && !this->rightChild->IsValid(previousNode))
return false;
return true;
}
Просто играть с шаблоном и простой структурой данных. Благодарим вас за ответы.
Проходите неинициализированный указатель на 'IsValid' –
Thx, пытался сосредоточиться на ошибки - исправлены версии: BOOL IsValid() Const { Const BST ** previousNode = новый Const BST *; * previousNode = nullptr; return this-> IsValid (previousNode); } bool IsValid (const BST ** previousNode) const –