取消引用不完整类型“ struct”的指针

时间:2019-08-21 20:48:30

标签: c struct typedef

在“ esame.h”中,我声明了typedef struct esame *esame;,在“ esame.c”中,我声明了:

struct esame{
    char corso[20];
    int voto;
    char data[11];
};

在“ libretto.h”中,我声明了typedef struct libretto *libretto;,在“ libretto.c”中,我声明了:

struct libretto{
    esame esami[MAXESAMI];
};

但是例如,如果我尝试printf

printf("Corso: %s\nVoto: %d\nData: %s\n", l->esami[i]->corso, l->esami[i]->voto, l->esami[i]->data);

它给我这个错误,为什么?

error: dereferencing pointer to incomplete type ‘struct esame’
    printf("Corso: %s\nVoto: %d\nData: %s\n", l->esami[i]->corso, l->esami[i]->voto, l->esami[i]->data);

1 个答案:

答案 0 :(得分:1)

我用来在头文件中声明类型,然后像您所做的那样在实现之一中定义它们,但方式截然不同。我该怎么做:

  • 在头文件中
typedef struct{
    char corso[20];
    int voto;
    char data[11];
}esame, *ptr_esame;
  • 然后在实现文件中可以使用以下类型:
esame esami[MAXESAMI];
ptr_esame testa = esami;

我真的不知道为什么这个typedef struct esame *esame;在语法上是正确的,即使通过阅读也没有道理。无论如何,我没事。

请记住,当多个源包含头文件时,重新定义可能很容易发生,因此请使用预编译器防护措施来避免这些问题。

#ifndef __ESAME_H__
#define __ESAME_H__

typedef struct{
    char corso[20];
    int voto;
    char data[11];
}esame, *ptr_esame;

...

#endif