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

Dereferencing pointer to incomplete type ‘struct'

我在 "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);

我曾经在头文件中声明类型,然后像您一样在实现中定义它们,但方式略有不同。我是这样做的:

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

我真的不知道为什么这个 typedef struct esame *esame; 在语法上是正确的,因为即使阅读它也没有意义。反正我的事none。

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

#ifndef __ESAME_H__
#define __ESAME_H__

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

...

#endif