【发布时间】:2016-05-30 09:07:34
【问题描述】:
我是 C 编程的新手。我必须为家庭作业编写一些函数/程序,然后用教授给出的 make 测试对其进行测试。
我有一个包含两个元素的结构:第一个元素是指向列表的指针,第二个元素是列表排序所依据的顺序类型。这是数据结构:
/* 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;
}
}
进行测试时,我收到以下警告:
raggi.c:在函数“inserisciTime”中:
raggi.c:42:27: 警告:从不兼容的指针类型 [-Wincompatible-pointer-types] 传递“inserisciTime”的参数 1
inserisciTime(l->head->next, pelem); ^raggi.c:38:6:注意:预期为“lista_t * {aka struct *}”,但参数类型为“struct elem *”
void inserisciTime(lista_t * l, elem_t* pelem) { ^
raggi.c:在函数“inserisciPosition”中:
raggi.c:49:31:警告:从不兼容的指针类型 [-Wincompatible-pointer-types] 传递“inserisciPosition”的参数 1
inserisciPosition(l->head->next, pelem); ^raggi.c:45:6:注意:预期为“lista_t * {aka struct *}”,但参数类型为“struct elem *”
void inserisciPosition(lista_t * l, elem_t* pelem) { ^
我的代码有什么问题?提前感谢您的帮助。
【问题讨论】:
-
警告不是很清楚吗:“
argument 1 ... incompatible pointer type”? -
还有十几个标题几乎相同的问题,这非常警告。这是重复的。
标签: c pointers struct insert compiler-warnings