我在这里遇到了一些问题。我创建了一个结构和一个函数来试图理解树数据结构是如何工作的。现在的问题是,当我尝试使用命令gcc test.c -o test
编译以下代码时,编译器总是返回错误消息{{ 1}},请给我一些帮助。
error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
答案 0 :(得分:5)
正确的签名是:
void createTree(BiTree T)
而不是:
void createTree(BiTree &T)
如果事实,你不能使用&在C函数签名中。你这样做的方式在C ++中是有效的,它支持引用。 C不这样做。
您可以在签名中使用指针(例如createTree(BiTNode* T)
),但在您的情况下不需要,因为您已经指定BiTree是指向BiTNode的指针。
重要更新:此更改将使您的函数编译,但为了使其工作,您还需要确保您可以实际使用在该函数内创建的指针。有两种方法可以做到这一点:
1)结果返回新指针:
BiTree createTree()
{
BiTree T;
int i;
scanf("%d", &i);
if(i == -1)
{
T = NULL;
}
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = i;
T->lchild = createTree();
T->rchild = createTree();
}
return T;
}
int main(void)
{
BiTNode* root = NULL;
root = createTree();
return 0;
}
2)将指向BiTree的指针作为函数参数(也许这就是你对引用的意义)。
void createTree(BiTree *T)
{
int i;
scanf("%d", &i);
if(i == -1)
{
*T = NULL;
}
else
{
*T = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->data = i;
createTree(&(*T)->lchild);
createTree(&(*T)->rchild);
}
}
int main(void)
{
BiTNode* root = NULL;
createTree(&root);
return 0;
}
答案 1 :(得分:1)
你的功能
void createTree(BiTree &T)
应该是
void createTree(BiTree *T)
或
void createTree(BiTree T)
您无法通过简单C中的C ++语法传递引用。