c语言 - 取消引用指向不完整类型"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: %snVoto: %dnData: %sn", l->esami[i]->corso, l->esami[i]->voto, l->esami[i]->data);

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

error: dereferencing pointer to incomplete type ‘struct esame’
printf("Corso: %snVoto: %dnData: %sn", 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

相关内容

  • 没有找到相关文章

最新更新