二进制搜索树C删除节点有些错误

时间:2014-01-23 17:17:03

标签: c++ compiler-errors

这是我的代码

访问http://pastebin.com/697Dr51E#

当我尝试为我制作一些错误时

  

错误1错误C2664:' search_arc' :无法转换参数1   '链接[]'链接* []'

功能定义:

int search_arc(link *gr[n], char c1, char c2)
{
        int flag = 0;
        if (search_node(gr, c1) && search_node(gr, c2))
        {
                int i = 0;
                while (gr[i] == NULL || gr[i]->key != c1)i++;
                link *p = gr[i];
                while (p->key != c2&&p->next != NULL)
                        p = p->next;
                if (p->key == c2) flag = 1;
        }
        return flag;
}  

函数调用:

switch (m)
            {

                case(7) : {cout << "\nInput first node : "; cin >> c;
                        cout << "\nInput second node : "; cin >> k;
                        if (search_arc(gr, c, k))cout << "\nYes!";
                        else cout << "\nNo!"; break;}
                case(8) : {list_node(gr); }
            }

2 个答案:

答案 0 :(得分:1)

您正在将link *类型参数传递给函数search_arc,而期望link *[]类型参数。将您的函数原型更改为

int search_arc(link *gr, char c1, char c2)  

如果您想传递link *类型参数。

答案 1 :(得分:1)

此代码存在很多问题。在这种情况下,您将重用名为gr的变量,该变量是在文件顶部附近声明的全局变量。然后,您使用相同的变量名称作为参数。您应该将全局或函数参数重命名为不同的名称并从那里继续。

目前还不清楚add_arc()函数中的代码是否尝试使用参数gr或全局gr,因为它们是不同的类型。一个是link**,另一个是link*

注意函数add_arc()的声明有一个参数link gr[n],它与search_arch()参数link *gr[n]的类型不同:

void add_arc(link gr[n], char c1, char c2)
{
    int i = 0;
    link *p;
    if (search_arc(gr, c1, c2))
    {
        cout << "\nExisting arc!\n";
...