C++错误(从不兼容的类型"void"分配给树节点*)

C++ error (assigning to TreeNode* from incompatible type'void')

本文关键字:分配 void 树节点 类型 错误 不兼容 C++      更新时间:2023-10-16

我正在实现一个树节点函数。但是我被困在删除节点上。 它不断给出此错误。我已经尝试过使用 TreeNode* 函数,它完全有效,但是当我尝试将其更改为 void 函数时,这个函数不断出现错误。

我正在尝试将其更改为空函数。

void Tree::deleteFrom(TreeNode* startintPoint, int value)

//from example in class, deleting a node

if (startintPoint == nullptr)
{
return;
}
else if (startintPoint->left != nullptr && value < startintPoint->value)
{
startintPoint->left = deleteFrom(startintPoint->left, value);
}
else if (startintPoint->right != nullptr && value > startintPoint->value)
{
startintPoint->right = deleteFrom(startintPoint->right, value);
}
else
{
if (startintPoint->left == nullptr && startintPoint->right == nullptr)
{
delete startintPoint;
startintPoint = nullptr;
}
else if (startintPoint->left == nullptr)
{
TreeNode* temp = startintPoint;
startintPoint = startintPoint->right;
delete temp;
}
else if (startintPoint->right == nullptr)
{
TreeNode* temp = startintPoint;
startintPoint = startintPoint->left;
delete temp;
}
else
{
TreeNode* temp = findMinValue(startintPoint->right);
startintPoint->value = temp->value;
startintPoint->right = deleteFrom(startintPoint->right, temp->value);
}

}
return startintPoint;
}

由于函数的返回类型是void,编译器不喜欢这些行

startintPoint->left = deleteFrom(startintPoint->left, value);

startintPoint->right = deleteFrom(startintPoint->right, value);

这些语句的 RHS 属于void型,而 LHS 属于TreeNode*型。

您需要将函数的返回类型更改为TreeNode*。这将允许您使用线条。

然后确保从函数返回正确的指针,您似乎已经在这样做了。

你像startintPoint->left = deleteFrom(...)一样赋值,但deleteFrom的返回值是void类型,即void deleteFrom(...).因此,它不会返回任何可以分配的值。

您可以将void Tree::deleteFrom(TreeNode* startintPoint, int value)更改为TreeNode* Tree::deleteFrom(TreeNode* startintPoint, int value)

如果你想保持deleteFrom原样,你可以引入一个额外的(可能是受保护的或私有的函数(,比如TreeNode* Tree::deleteFromRecursive(TreeNode* startintPoint, int value),它递归地调用自己,deleteFrom调用一次。