0

我有一个头文件,dimensions.h其中:

#ifndef DIM_H
#define DIM_H

typedef struct Dimensions
{
    int width;
    int height;
} DIM;

DIM * GetHeader (FILE * fp);

#endif

从这里我有 ac 文件确实有这个:

#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. 因此,我将代码更改DimensionsDIM(仍然没有真正理解这两个名称“方案”。

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

然后我收到错误d->widthd->height说它正在取消引用指向不完整类型的指针,所以我交换->.然后是一个错误request for member width/height in something not a structure or union

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

谢谢!

4

1 回答 1

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

应该修复你的代码。

于 2013-04-18T02:40:27.327 回答