Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6个月前关闭。
在“ esame.h”中,我声明了
在“ libretto.h”中,我声明了
但是如果例如我尝试
它给了我这个错误,为什么?
然后,您可以在实现文件中使用以下类型:
我真的不知道为什么
请记住,当多个源包含头文件时,重新定义可能很容易发生,因此请使用预编译器防护措施来避免这些问题。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6个月前关闭。
在“ 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;
在语法上是正确的,即使通过阅读也没有道理。无论如何,我没事。请记住,当多个源包含头文件时,重新定义可能很容易发生,因此请使用预编译器防护措施来避免这些问题。
#ifndef __ESAME_H__
#define __ESAME_H__
typedef struct{
char corso[20];
int voto;
char data[11];
}esame, *ptr_esame;
...
#endif
关于c - 取消引用不完整类型“struct”的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57599005/
10-13 00:26