我正在用C编写代码进行分配。
这是相关代码:
//operation: text(elem)
xml_list *text(xml_list *elem){
if(isEmpty(elem)){
return Nil();
}
return append(text1(head(elem)),text(tail(elem)));
}
//operation: text1(elem)
xml_list *text1(xml_list *elem){
if(isText(elem)){
return Cons(elem,Nil());
}
else{
return text(childeren(elem));
}
}
这给了我错误:error: conflicting types for 'text1'
xml_list *text1(xml_list *elem){
我无法找出问题的根源。我现在已经连续工作了8个小时,我对此已经失去了理智。请有人帮助我
答案 0 :(得分:3)
您使用text1
xml_list *text(xml_list *elem){
if(isEmpty(elem)){
return Nil();
}
return append(text1(head(elem)),text(tail(elem)));
}
在声明之前,编译器使用(不幸的是)旧的“隐式int
”规则,并假设text1
返回int
。
当遇到它返回xml_list*
的定义时,会与从隐式int
声明中获得的类型冲突。
在标题中声明您的函数,并将其包含在源代码中,以便在使用函数时知道所有原型。
答案 1 :(得分:2)
到达时
return append(text1(head(elem)),text(tail(elem)));
编译器不知道text1
的返回类型。所以它假定int
并记住它。后来当它达到text1的定义时,它将是冲突的。
要解决此问题,请向
声明text1xml_list *text1(xml_list *); // <---- Here
xml_list *text(xml_list *elem){
if(isEmpty(elem)){
return Nil();
}
return append(text1(head(elem)),text(tail(elem)));
}
//operation: text1(elem)
xml_list *text1(xml_list *elem){
if(isText(elem)){
return Cons(elem,Nil());
}
else{
return text(childeren(elem));
}
}