我试图将一个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,但后来我得到了一个范围错误。
答案 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
}
最后,您需要编译并链接这两个文件。