【问题标题】:typedef struct in header file struct definition in c file头文件中的typedef struct c文件中的结构定义
【发布时间】:2013-10-15 22:58:18
【问题描述】:

我在 sampleHeader.h 中有一个结构的 typedef,类似于:

typedef struct example Example;

我的 sampleSource.c 中有:

struct example{
    char a[4];
    char b[4];
    char c[5];
}

现在由于某种原因,当我返回一个指向我的主函数的指针时,该指针引用了一个已创建(和 malloc'd)的结构并尝试打印出每个成员的值,我得到一个错误“不能取消对不完整类型的引用”

有什么想法吗?

【问题讨论】:

  • 我们能看到导致“无法取消引用不完整类型”错误的代码吗?
  • 我们需要看代码,但是你需要一个';'在该结构定义的末尾。
  • 不需要代码,这是一个简单的范围问题。 main.c看不到定义,因为header中没有定义。

标签: c pointers dynamic struct allocation


【解决方案1】:

在头文件中,您只前向声明了结构。这很好,您将能够在标头(以及包含此标头的任何其他标头或 cpp 文件)中声明对结构的指针和引用。

由于编译器只看到了 cpp 模块中的定义,因此这是唯一可以按值声明 struct example 类型的变量或取消引用访问成员的指针的地方。在 cpp 文件之外,编译器不知道结构有多大或成员是什么。

如果您需要在多个模块中使用该结构,请在标头中一起声明和定义该结构。

【讨论】:

    【解决方案2】:

    没有看到实际代码很难确定,但是....

    struct example{
        char a[4];
        char b[4];
        char c[5];
    };
     ^ note the new semi colon.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2018-04-16
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多