错误:类型冲突

时间:2013-04-03 19:25:03

标签: c xml

我正在用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个小时,我对此已经失去了理智。请有人帮助我

2 个答案:

答案 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的定义时,它将是冲突的。

要解决此问题,请向

声明text1
xml_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));
  }
}