头文件帮助&结构

时间:2013-04-18 02:32:09

标签: c struct header malloc

我有一个头文件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->widthd->height说它取消引用指向不完整类型的指针,因此我将->.交换,然后错误request for member width/height in something not a structure or union

所以不确定发生了什么,可能是一件非常简单的事情,我很遗憾,所以如果有人能提供帮助那就太棒了。

谢谢!

1 个答案:

答案 0 :(得分:1)

第1部分:Dimensions undeclared

在原始代码中查看此行?

struct Dimensions * d = (struct Dimensions *)malloc(sizeof(Dimensions));

如果您在某处使用struct Dimensions,请随处使用。将sizeof更改为

sizeof(struct Dimensions)

并且Dimensions undeclared应该消失。

第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));

应该修复你的代码。