[英]C++ binary tree pointers issue
So i'm making a simple binary tree to store integers but I keep getting a "expression must have pointer-to-class type" error in the insert function, this is probably just me not noticing something obvious but I'm relatively new to C++ so any help would be appreciated. 所以我正在创建一个简单的二叉树来存储整数但是我在insert函数中一直得到一个“表达式必须有指针类型”的错误,这可能只是我没有注意到一些明显的东西,但我相对较新的C ++所以任何帮助将不胜感激。 Thanks 谢谢
struct node
{
//Data stored in this node of the tree
int data;
//The left branch of the tree
node *left;
//The right branch of the tree
node *right;
};
using namespace std;
//Inserts a value into the tree
void insert(node **tree, int value)
{
if (*tree == nullptr)
{
//Create new node
*tree = new node;
//Set new value
(*tree)->data = value;
//Set branches to nullptr
(*tree)->left = nullptr;
(*tree)->right = nullptr;
}
else
{
if (value < (*tree)->data)
insert(*tree->left, value);//ERROR HERE
if (value >(*tree)->data)
insert(*tree->right, value);//ERROR HERE
}
}
//Deletes the tree
void delete_tree(node *tree)
{
if (tree != NULL)
{
delete_tree(tree->left);
delete_tree(tree->right);
delete tree;
}
}
//Prints the tree in order
void inorder(node *tree)
{
if (tree != nullptr)
{
inorder(tree->left);
cout << tree->data << " ";
inorder(tree->right);
}
}
int main(int argc, char **argv)
{
while (true){
//if(userinputflag=0)
//else node *tree = input number
node *tree = nullptr;
while (true)
{
int num;
cout << "Enter number (-1 to exit): ";
cin >> num;
if (num == -1)
break;
insert(&tree, num);
}
inorder(tree);
cout << endl;
}
}
You function as first parameter requier pointer-to-pointer to node 您作为第一个参数requier指向节点的指针
void insert(node **tree, int value)
And here 和这里
insert(*tree->left, value);//ERROR HERE
which is not a valid. 这不是有效的。
I think you need something like this 我想你需要这样的东西
insert(&((*tree)->left), value);//ERROR HERE
The signature of insert
is: insert
的签名是:
void insert(node **tree, int value);
You are passing in *tree->left
, which is *(tree->left)
, which is not a valid expression because tree
is not a "pointer-to-class type", as the error suggests (it's a pointer-to-pointer-to-class). 你正在传入*tree->left
,这是*(tree->left)
,这不是一个有效的表达式,因为tree
不是“指向类的指针”,因为错误暗示(它是一个指针指向)终场到类)。
What you had intended was (*tree)->left
, which is a valid expression, but that would be a node*
and our signature calls for a node**
, hence: 您的意图是(*tree)->left
,这是一个有效的表达式,但这将是一个node*
,我们的签名调用node**
,因此:
insert(&((*tree)->left), value);
insert(*tree->left, value)
Operator ->
has a higher precedence than *
. 运算符->
的优先级高于*
。 The expression tree->left
is syntactically wrong as tree
type in the expression is node **
. 表达式tree->left
在语法上是错误的,因为表达式中的tree
类型是node **
。 So, try - 所以,试试 -
insert(&((*tree)->left), value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.