[英]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
int search(struct intnode** root, int lookingfor, int* counter);
#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.