繁体   English   中英

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

[英]Error: conflicting types for function, function declared in header file

所以我正在尝试使用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;
}

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

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

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

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

#ifndef MY_HEADER_H
#define MY_HEADER_H

// code here

#endif // MY_HEADER_H

编译代码时,我得到的错误与您相同。 以及许多其他人。

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

我编辑了那段代码而没有编译错误。
主要的变化是定义了一个struct intnode
我定义它的方式是猜测。 你需要哪个struct intnode取决于你,但你肯定需要一个。
还将search返回类型更改为void* 并从这些行中删除了*运算符for 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM