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と想定します。text1int

を返すという定義に遭遇すると、それは暗黙の宣言xml_list*から取得された型と競合します。int

関数をヘッダーで宣言し、それをソースに含めて、関数が使用されたときにすべてのプロトタイプが認識されるようにします。

于 2013-04-03T19:27:10.650 に答える