我创建了一个msgbuf.h文件,如下所示:
//msgbuf.h
typedef struct msgbuf1
{
long mtype;
M1 *m;
} message_buf;
typedef struct msgclient
{
int msglen;
int msgtype;
char cp[100];
}M1;
一个程序作为check.c。以下编程给出了没有M1的错误。为什么会这样?我做错了什么? 我认为文件“msgbuf.h”的内容应该在prog check.c中复制,程序运行正常。请让我知道。
//check.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"msgbuf.h"
int main()
{
message_buf *sbuf;
sbuf=malloc(sizeof(sbuf));
sbuf->m=malloc(sizeof(M1));
sbuf->m->msglen=10;
printf("\n%d",sbuf->m->msglen);
printf("\n %d",sizeof(sbuf->m));
return 0;
}
谢谢:)
答案 0 :(得分:3)
简单,在M1
之前声明message_buf
;
typedef struct msgclient
{
int msglen;
int msgtype;
char cp[100];
}M1;
typedef struct msgbuf1
{
long mtype;
M1 *m;
} message_buf;
在这个问题下面阅读凯尔塔尔的评论。
答案 1 :(得分:3)
您应该在使用之前声明M1:
//msgbuf.h
typedef struct msgclient
{
int msglen;
int msgtype;
char cp[100];
}M1;
typedef struct msgbuf1
{
long mtype;
M1 *m;
} message_buf;