0

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

4

2 回答 2

3

你用text1

xml_list *text(xml_list *elem){
  if(isEmpty(elem)){
    return Nil();
  }
  return append(text1(head(elem)),text(tail(elem)));
}

在它被声明之前,所以编译器(不幸的是)使用旧的“隐式int”规则,并假设text1返回一个int.

当遇到说它返回 an 的定义时,它与从隐式声明中xml_list*获得的类型冲突。int

在标头中声明您的函数,并将其包含在源代码中,以便在使用函数时知道所有原型。

于 2013-04-03T19:27:10.650 回答
2

当它到达时

return append(text1(head(elem)),text(tail(elem)));

编译器不知道text1. 所以它假设int并记住它。稍后当它到达 text1 的定义时,它会发生冲突。

为了解决这个前向声明 text1 like

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));
  }
}
于 2013-04-03T19:31:53.103 回答