我有一个头文件,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\0"));
d->height = atoi(strtok(NULL, " \n\0"));
}
return d;
}
但是当我运行它时,我收到诸如 Dimensions undeclared
之类的错误。因此,我尝试将 Dimensions
更改为 DIM
的代码(仍然没有真正理解这两个名称“scheme”。
struct DIM * d = (struct DIM *)malloc(sizeof(DIM));
然后我收到 d->width
和 d->height
的错误,说它取消引用指向不完整类型的指针,所以我交换了 ->
与 .
,然后出现错误请求非结构或 union 中的成员宽度/高度
。
所以不太确定发生了什么,可能是我错过的非常简单的事情,所以如果有人可以提供帮助那就太棒了。
谢谢!
最佳答案
第 1 部分:未声明尺寸
在您的原始代码中看到这一行吗?
struct Dimensions * d = (struct Dimensions *)malloc(sizeof(Dimensions));
如果您在某处使用struct Dimensions
,请在任何地方使用它。将 sizeof
更改为
sizeof(struct Dimensions)
并且未声明的维度
应该消失。
第 2 部分: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));
应该修复你的代码。
关于c - 头文件帮助和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073553/