错误:函数的冲突类型,头文件中声明的函数

时间:2015-09-07 06:10:25

标签: c function compiler-errors

所以我试图使用makefile和头文件等编译一个多文件程序。我已经有了这个程序,我继续得到同样的错误,即使我已经仔细检查了输入一百万次。救命啊!

错误:

search.c:11: error: conflicting types for 'search' search.h:1: note: previous declaration of 'search' was here

这是我的.h文件

int search(struct intnode** root, int lookingfor, int* counter);

这是我的.c文件

#include "search.h"
#include "intnode.h"
#include <stdlib.h>
#include <stdio.h>

/*
Usage:
  search(root, value);
*/

int search(struct intnode** root, int lookingfor, int* counter) {

  /*COMPARE TO ROOT KEY*/
  /*IF EQUAL*/
  if(int_compare(lookingfor, (*root)->key) == 0) {
    printf("%d exists in tree", lookingfor);
    counter++;
    if ((*root)->R != NULL && (*root)->key == (*root)->R) {
      search((*root)->R, lookingfor, *counter);
    }
  }

  /*IF GREATER THAN AND THERE IS A CHILD*/
  else if(int_compare(lookingfor, (*root)->key) == 1 && (*root)->R != NULL) {  
    search((*root)->R, lookingfor, *counter);
    counter++;
  }

  /*IF LESS THAN AND THERE IS A CHILD*/
  else if(int_compare(lookingfor, (*root)->key) == 2 && (*root)->L != NULL) {
    search((*root)->L, lookingfor, *counter);
    counter++;
  }
  return NULL;
}

3 个答案:

答案 0 :(得分:2)

确保在声明intnode之前定义search()

答案 1 :(得分:0)

#include "intnode.h"应放在search.h中。

从头文件中包含.h + c代码模块所需的所有头文件是一个好习惯。

在每个h文件中也使用标题保护:

#ifndef MY_HEADER_H
#define MY_HEADER_H

// code here

#endif // MY_HEADER_H

答案 2 :(得分:0)

编译代码时出现的错误与您相同。和许多其他人一样。

主要问题是struct intnode根本没有定义 也许它已定义但您尚未在此处发布其代码。但我们只能提供你所拥有的建议。也许它是在intnode.h中定义的,在这种情况下,在search.h的开头包含它可以解决这个特殊问题。

我编辑了那段代码而没有编译错误 主要变化是定义struct intnode 我定义它的方式是猜测。您需要哪struct intnode取决于您,但您确实需要一个。{ 还将search的返回类型更改为void*。 并从这些行中删除了counter的*运算符:

search((*root)->R, lookingfor, *counter);

固定代码。 search.h:

struct intnode
{
  void* key;
  struct intnode** R;
  struct intnode** L;
};

void* search(struct intnode** root, int lookingfor, int* counter);

search.c:

include "search.h"
/* #include "intnode.h" */
#include <stdlib.h>
#include <stdio.h>

/*
Usage:
  search(root, value);
*/

void* search(struct intnode** root, int lookingfor, int* counter) {

  /*COMPARE TO ROOT KEY*/
  /*IF EQUAL*/
  if(int_compare(lookingfor, (*root)->key) == 0) {
    printf("%d exists in tree", lookingfor);
    counter++;
    if ((*root)->R != NULL && (*root)->key == (*root)->R) {
      search((*root)->R, lookingfor, counter);
    }
  }

  /*IF GREATER THAN AND THERE IS A CHILD*/
  else if(int_compare(lookingfor, (*root)->key) == 1 && (*root)->R != NULL) {
    search((*root)->R, lookingfor, counter);
    counter++;
  }

  /*IF LESS THAN AND THERE IS A CHILD*/
  else if(int_compare(lookingfor, (*root)->key) == 2 && (*root)->L != NULL) {
    search((*root)->L, lookingfor, counter);
    counter++;
  }
  return NULL;
}