我有一个头文件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
的代码(仍然没有真正理解这两个名称'方案'。
struct DIM * d = (struct DIM *)malloc(sizeof(DIM));
然后我收到错误d->width
和d->height
说它取消引用指向不完整类型的指针,因此我将->
与.
交换,然后错误request for member width/height in something not a structure or union
所以不确定发生了什么,可能是一件非常简单的事情,我很遗憾,所以如果有人能提供帮助那就太棒了。
谢谢!
答案 0 :(得分:1)
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));
->
.
当左侧是指向结构的指针时使用->
,当左侧只是结构时使用.
。
struct Dimensions * d = (struct Dimensions *)malloc(sizeof(struct Dimensions));
应该修复你的代码。