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

C 函数调用给出不兼容参数类型的错误,c,function,structure,function-call,C,Function,Structure,Function Call,我在用c编写代码时遇到了一个问题(我不是有经验的程序员)。 我有一个这样的结构 struct afreq { int freq; unsigned char sym; short int left,right,next; }; 在主要功能方面: struct afreq data[50] ; int size=操作(数据、计数)//此函数用于执行一些操作和 返回int类型的大小。我在下面的函数调用中使用此大小: dictionary(dat

我在用c编写代码时遇到了一个问题(我不是有经验的程序员)。 我有一个这样的结构

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

struct afreq data[50] ;  
int size=操作(数据、计数)//此函数用于执行一些操作和 返回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");
        }
    }

错误本质上就是编译器所说的错误。作为第一个参数传递的是
data[i].left
,它的类型是short int,而需要指向
struct afreq
的指针。它可以编译的唯一原因是,默认情况下,gcc允许int和pointer之间的转换(但没有太多的原因需要这样做)

如果我正确地理解了您要做的事情,那么您希望递归地调用您的“dictionary”函数,它看起来像是一棵树。问题在于,这种结构并没有得到很好的定义。您正试图用它们的值“索引”树的节点(这是我对
数据[I]的理解。左
),但无法在(比如,
'a'
)和之间“建立链接”“将
'a'
作为符号的
结构afreq
。您或者需要在某个地方创建一个对应表并调用它,或者需要将结构中的
left
right
转换为指向相应结构的指针


祝你好运

data[i]。左
类型是
short int
有这么多问题。@BLUEPIXY我的问题你有什么解决方案吗(我不得不不使用指针,否则我会做的。)你能帮我吗?谢谢(下面试图回答的人已经完全理解了我想做什么。但是如何通过创建表来实现它?(不是指针)请提供任何片段或指导?@Dipto感谢您的帮助。实际上,“布莱斯”完全理解了我的问题。你可以通过阅读来准确理解我想要实现的目标。但是我不知道如何通过创建表来实现(因为我不必使用指针),我认为您应该仔细考虑应该传递给函数的内容。是的,您理解我。但我不得不不使用指针。你还可以解释一下我现在是怎么做到的吗?有什么代码需要帮助吗?我不能理解“制作一张桌子”并调用它?你能给我解释一下这个,任何代码吗?(如果可能的话,谢谢)一种方法是定义一个对应表,比如
intcorrespondance[26]
。对于您遇到的每个符号
sym
,您将相应的
afreq
元素的索引存储在相应的[sym-'a']中,然后调用
字典(数据[correspondance[data[i].left]])。这并不理想,但它应该能起作用。您还可以管理您的数据数组,以便它将[sym-
a`]作为索引,但我不知道它是否适合您的用例。我恐怕不能提供太多的代码,因为坦率地说,代码的当前状态太混乱,我没有动力去深入研究…当我执行您要求我做的事情时,我得到了错误:改进。c:85:2:警告:传递'dictionary'的参数1会使指针从整数变为无强制转换[默认启用]改进.c:74:1:注意:应为“struct afreq*”,但参数类型为“short int”,有解决方案吗?谢谢(但有一件事我不明白,当我们在数据[]中插入对应[data[i].left]时,它如何改变了它的数据类型)?我的意思是beofre错误是“short int”,但现在错误是“参数的类型为'struct afreq'”,对于第二个问题,数据类型更改是因为。。。嗯,它改变了:数据[something]是struct afreq类型的,因为数据是这些数据的数组。如果您不清楚这一点,也许您应该查看您的代码并尝试思考,对于每个变量的出现和组成,这是什么类型的东西。它还可以帮助你理解做什么/如何做。祝你好运
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’