我正在尝试制作一个简单的 BST ADT,但我遇到了一些问题,因为我还是 C 的新手。
它可以编译,但是带有警告和“注释”,如果我运行程序,它只会打印一个元素,即根节点(我希望它按顺序打印所有元素)。
我只提供了我认为必要的代码片段,如果你想要所有的代码就问吧。
bst.c - BST 遍历方法
41 void bst_inorder(bst b, void f(char *str)) {
42 if (b->key == NULL) {
43 return;
44 }
45 bst_inorder(b->left, f);
46 f(b->key);
47 bst_inorder(b->right, f);
48 }
测试.c
14 bst_inorder(my_bst, printf);
bst.h
10 extern void bst_inorder(bst b, void f(char *str));
我正在像这样编译它
gcc -O2 -W -Wall -ansi -pedantic *.c -o TEST
我收到这些警告
TEST.c: In function ‘main’:
TEST.c:14:4: warning: passing argument 2 of ‘bst_inorder’ from incompatible pointer type [enabled by default]
In file included from TEST.c:3:0:
bst.h:10:13: note: expected ‘void (*)(char *)’ but argument is of type ‘int (*)(const char * __ restrict__)’