函数调用给出不兼容类型的参数的错误

时间:2014-01-16 08:28:50

标签: c function structure function-call

我在c编码时遇到了问题(我不是经验丰富的程序员)。 我有这样的结构

struct afreq
{
    int freq;
    unsigned char sym;      
    short int left,right,next;      
};
主要功能

struct afreq data[50] ;  

int size = manipulation(data,count); //这个函数做了一些操作和  返回int类型的大小。我在下面的函数调用中使用此大小:

dictionary(data,var,size);

问题创建部分在这里:

///////////////////////////// Definition of Dictionary function /////////////////////////////////////////


  dictionary(struct afreq data[] ,char *var,size_t dataSize)// function definition create problem in first argument when caled from the another recursive function call inside this function.
dictionary(struct afreq data[] ,char *var,size_t dataSize)
    { 
    int i;
    printf("\n data: %d\n", dataSize);
    for(i=2;i<dataSize;++i)
    {
    if(data[i].left=='\0')
    { int correspondance[data[30];
       char temp[30];
       strcpy(temp, var);
        strcat(temp, "0");
        printf("check1");   
     dictionary(data[correspondance[data[i].left]], temp,dataSize); //error here
    }  
    printf("\n");
        }
    }

我想用这个做什么? 我必须从作为唯一参数给出的文件中读取字母表。该文件是“Input.txt”并包含在'abcdef'里面(我在我的程序中计算它们的频率),然后我将它们以格式[symbol Frequency LeftChild RightChild]保存在一个数组中(例如:[a 1 0 0] [ b 2 0 0] [c 3 ab]等(就像霍夫曼代码))。 到目前为止,我已经做好了一切。但是当我尝试打印字典时(就像我们在huffman(o和1中的路径))(在示例中我们可以看到“c”是父级,“a”的路径是“o”和“b”是“1”)。为了实现这一部分,我编写了上面的代码,它在函数调用的第一个参数中创建了错误。 这是完整的代码(但请不要忘记在包含“abcdef”的唯一参数中包含“Input.txt”文件。

Here is the output:



 hp@ubuntu:~/Desktop/Internship_Xav/Task2$ gcc ttask.c -o ttask
improve.c: In function ‘dictionary’:
improve.c:85:2: error: incompatible type for argument 1 of ‘dictionary’
improve.c:74:1: note: expected ‘struct afreq *’ but argument is of type ‘struct afreq’

1 个答案:

答案 0 :(得分:1)

错误基本上就是编译器所说的错误。作为第一个参数,您传递的是data[i].left,其类型为short int,而需要指向struct afreq的指针。无论如何编译它的唯一原因是因为默认情况下gcc允许int和指针之间的转换(但是你想要这样做的原因并不多)。

如果我理解你正在尝试做什么 - 你想要递归地调用你的“字典”函数来看似是一棵树。问题是该结构并没有很好地定义。您正试图用它们的值“索引”树的节点(这是我对data[i].left所理解的),但是没有办法在'a'之间“建立链接”,以及struct afreq作为符号的'a'。您需要在某处制作对应表并拨打电话,或者您需要转换left和{{1}在你的结构中指向相应结构的指针。

祝你好运!