在“ 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);
答案 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