C++错误(从不兼容的类型"void"分配给树节点*)
C++ error (assigning to TreeNode* from incompatible type'void')
我正在实现一个树节点函数。但是我被困在删除节点上。 它不断给出此错误。我已经尝试过使用 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
调用一次。
相关文章:
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- C++为 void 指针分配一个字符串
- 取消引用 void 指针以将值分配给结构
- 不能将 "void *" 类型的值分配给类型 "RANDOMSTRUCT *" 的实体
- 将 void 指针分配给另一个 void 指针
- void 值没有被忽略,因为它应该是(试图将 void 分配给非 void 变量?
- C++错误(从不兼容的类型"void"分配给树节点*)
- 尝试分配函数指针时获取"Void value not ignored as it ought to be"
- 如何在堆上分配一个void*阵列
- 分配运算符过载:返回void与返回参考参数
- 智能感知:不能将 "void" 类型的值分配给类型 "double" 的实体
- C++中带有 void* 的结构的内存分配
- 使用 void 指针分配对象数组
- 指向动态分配的类的void指针
- 在 C 中,我可以将 void* 分配给字符*,但不能在 C++ 中分配
- C++void值没有被忽略,因为它应该被忽略(没有试图分配void值..)
- 无法在c++中的void中分配指针
- 如何正确地在void函数内部动态分配2d数组
- 正在将内存分配给二维字符数组,错误:从“void*”到“char**”的转换无效
- g++ 4.9.0允许对位置分配使用operator delete[](void*, size_t)