【问题标题】:Error: conflicting types错误:类型冲突
【发布时间】:2013-03-25 15:25:45
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过在 Google 上搜索“冲突类型”对您的编译器意味着什么?

标签: c xml


【解决方案1】:

你使用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 声明中获得的类型冲突。

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

【讨论】:

  • 你能自己写吗?如果没有,您可以在文件顶部使用原型(xml_list * text1(xml_list *elem);,text 同上)声明函数吗?如果连那个都没有,你能做什么呢?
【解决方案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));
  }
}

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 2014-03-10
    • 2012-10-04
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    相关资源
    最近更新 更多