注意:预期'struct filler'但参数类型为'struct Info'

时间:2016-03-04 21:42:56

标签: c struct

我试图将一个struct从main发送到.h文件,以便在那里进行操作。这是我的.c中的代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "funcon.h"
enum sign{
positive,
negative
}sign;

enum type{
integer,
floating
}type;

struct Info{
enum sign leading;
enum type out;
char * exp;
char * fraction;
char * binary;
};


int main(int argc, char ** argv){
struct Info stuff;
stuff.exp = malloc(8); 
stuff.fraction = malloc(23); 
stuff.binary = malloc(31); 
strncpy(stuff.exp, argv[1]+1,8);
strcpy(stuff.fraction,argv[1]+9);
strcpy(stuff.binary, argv[1] + 1);
printf("%s\n", stuff.exp);
printf("%s\n", stuff.fraction);
doyourjob(stuff);
return 0;
}  

这是.h文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum signf{
positive1,
negative1
}signf;

enum typef{
integer2,
floating2
}typef;

struct filler{
enum signf leading2;
enum typef out2;
char * exp2;
char * fraction2;
char * binary2;
};

int doyourjob(struct filler solveme){

if(solveme.out2 == integer2){

    if(solveme.leading2 == positive1){
    int hold;
    sscanf(solveme.binary2, "%d", &hold);

    }else{

    }

}else{//When solveme is a floating type

}
}  

当我编译时,我收到错误:
function.c:在函数'main'中:
function.c:51:错误:'doyourjob'参数1的不兼容类型
funcon.h:23:注意:预期'struct filler'但参数类型为'struct Info' 我也尝试将funcon.h中的struct filler更改为Info,但后来我得到了一个范围错误。

1 个答案:

答案 0 :(得分:1)

类型不兼容。它们必须属于同一类型。 将类型更改为 struct Info 是正确的,但您还需要将struct Info的声明移动到某处 int doyourjob(..)可以看到它。例如。在.h文件中 int doyourjob(..)之前。

另外,您应该在头文件中声明但不实现函数。即在你的.h中添加:

struct Info {
   // ...
}

int doyourjob(struct Info);

现在在.c文件(比如doyourjob.c)中你有:

#include "doyourjob.h"

int doyourjob(struct Info) {
   // Your code here
}

最后,您需要编译并链接这两个文件。

相关问题