我是C编程的新手。我必须为家庭作业写一些功能/程序,然后用教授给出的考试来测试它们。
我有一个包含两个元素的结构:第一个元素是指向列表的指针,第二个元素是排序列表所依据的顺序类型。以下是数据结构:
/* order type
NOTORD = no order
TIME = ordered by increasing time
POSITION = ordered by increasing position */
typedef enum {NOTORD=0, TIME=1, POSITION=2} ord_t;
typedef struct elem {
double position;
double time;
struct elem * next;
} elem_t;
typedef struct {
elem_t * head;
ord_t ord;
} lista_t;我必须根据顺序类型将一个元素(通过输入)插入到列表中。这是我的代码:
void inserisciInTesta(lista_t *l, elem_t *el) {
el->next=l->head;
l->head=el;
}
void inserisciTime(lista_t * l, elem_t* pelem) {
if(l->head->time >= pelem->time)
inserisciInTesta(l, pelem);
else
inserisciTime(l->head->next, pelem);
}
void inserisciPosition(lista_t * l, elem_t* pelem) {
if((l->head)->position >= pelem->position)
inserisciInTesta(l, pelem);
else
inserisciPosition(l->head->next, pelem);
}
int inserisci(lista_t * l , elem_t* pelem) {
if(l->ord==TIME) {
inserisciTime(l, pelem);
return 0;
}
else if(l->ord==POSITION){
inserisciPosition(l, pelem);
return 0;
}
else {
inserisciInTesta(l, pelem);
return 0;
}
}在做测试时,我会收到这样的警告:
C:在函数“插入时间”中: raggi.c:42:27:警告:从不兼容的指针类型传递‘inserisciTime’的参数1- type兼容-指针-类型 inserisciTime(l->head->next,pelem);^ raggi.c:38:6:注意:预期的‘lista_t*{又名结构*}’,但参数的类型是‘struct *’。 void inserisciTime(lista_t * l,elem_t* pelem) {^ 在函数“插入位置”中: raggi.c:49:31:警告:从不兼容的指针类型传递‘inserisciPosition’的参数1- type兼容-指针-类型 inserisciPosition(l->head->next,pelem);^ raggi.c:45:6:注意:预期的‘lista_t*{又名结构*}’,但参数的类型是‘struct *’。 void inserisciPosition(lista_t * l,elem_t* pelem) {^
我的密码怎么了?提前感谢你的帮助。
发布于 2016-05-30 09:35:11
这个错误的原因是汤姆解释的。我建议您更改函数,而不是使用递归调用(即函数调用本身),而是使用while循环来查找需要插入元素的位置。
在插入一个新元素时,需要修改两个指针:指向下一个元素的指针和来自前一个元素的指针。使用递归函数执行此操作可能会更令人困惑。
此外,检查在列表开头插入、在列表末尾插入以及列表是否为空的特殊情况。
发布于 2016-05-30 09:14:03
编译器的警告几乎可以说明一切。考虑第一个。insetisciTime期望lista_t *作为它的第一个参数。坏电话正在通过l->head->next。那是什么类型的?嗯,l是lista_t *。所以l->head是elem_t *。所以l->head->next是一个struct elem *,它相当于elem_t *。这是一种类型不匹配:函数需要一个lista_t *,而您正在传递一个elem_t *。
两者之一必须更改:要么更改函数以匹配您要传递的内容,要么更改传递的内容以满足函数的要求。编译器警告将您保存在这里,因为它不可能按原样工作。
另一个警告也有同样的问题。
https://stackoverflow.com/questions/37521748
复制相似问题