c - 取消引用指向不完整类型的指针 ‘struct'

标签 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);

最佳答案

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

  • 在头文件中
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/

相关文章:

c - OpenMP 线程 ID 如何与递归一起使用?

在C中将ASCII码转换为字符串

c - 制作一个包含结构的数组 - C

c++ - 结构 C++ 的数组

c++ - 如何将 N 个通用参数传递给 typedef 函数指针?

c - 替换 For 循环的宏

c - Windows API DLL 文件的许可证文件

c - 编译时的offsetof

c - 程序在 VS2012 上运行良好,但在使用 Tiny C 时遇到错误

c - 制作 typedef 结构的副本/指针