我有一个头文件,dimensions.h
和在它:
#ifndef DIM_H
#define DIM_H
typedef struct Dimensions
{
int width;
int height;
} DIM;
DIM * GetHeader (FILE * fp);
#endif
从这里我有一个c文件,它是这样的:
#include "dimensions.h"
.
.
.
DIM * GetHeader (FILE * fp)
{
char s[1024];
struct Dimensions * d = (struct Dimensions *)malloc(sizeof(Dimensions));
if (fgets(s, sizeof(s), fp) != NULL)
{
printf("%s", s);
d->width = atoi(strtok(s, " n "));
d->height = atoi(strtok(NULL, " n "));
}
return d;
}
但是当我运行它时,我得到像Dimensions undeclared
这样的错误。所以我玩了代码改变Dimensions
到DIM
(仍然没有真正理解这两个名称'方案'。
struct DIM * d = (struct DIM *)malloc(sizeof(DIM));
然后我得到d->width
和d->height
的错误,说它对不完整类型的指针解引用,所以我用.
交换了->
,然后request for member width/height in something not a structure or union
的错误。
所以不太确定发生了什么,可能是一些非常简单的东西,我错过了,所以如果有人可以帮助,那就太棒了。
谢谢!
第一部分:Dimensions undeclared
看到原始代码中的这一行了吗?
struct Dimensions * d = (struct Dimensions *)malloc(sizeof(Dimensions));
如果你在某个地方使用struct Dimensions
,那么在任何地方都使用它。将sizeof
更改为
sizeof(struct Dimensions)
和Dimensions undeclared
应该消失
第二部分:DIM
版本
代码:struct DIM * d = (struct DIM *)malloc(sizeof(DIM));
当您使用typedef struct {...} DIM
时,您只需将其称为DIM
-而不是struct DIM
。
DIM * d = (DIM *)malloc(sizeof(DIM));
第3部分:将->
与.
交换
当左侧是指向结构体的指针时使用->
,当左侧只是一个结构体时使用.
。
tl;博士
struct Dimensions * d = (struct Dimensions *)malloc(sizeof(struct Dimensions));