所以我试图使用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;
}
答案 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;
}