【问题标题】:How to fix incomplete type of struct如何修复不完整的结构类型
【发布时间】:2019-03-26 21:29:31
【问题描述】:

基本上,由于老师的要求,我在此 CLion 应用程序上运行此代码。

我在 .c 文件中定义了我的“Estado”结构,如下所示:

struct estado{

    char modo;
    char jogador;
    char matriz[8][8];
    int pretas;
    int brancas;

};

在我的 .h 文件中有这个:

typedef struct estado* Estado;

在我尝试访问的 main.c 文件中:

printf("%s",novo -> matriz[1]);

它说:“错误:取消引用指向不完整类型‘struct estado’的指针”

你能帮帮我吗?

【问题讨论】:

    标签: c


    【解决方案1】:

    您应该将struct 声明放在.h 文件中,而不是.c 文件中。

    【讨论】:

    • @LeonardoMaia 你是什么意思?这样做应该可以解决您的错误。
    • 我的意思是我可以在 .c 文件中创建结构,并将其放在 .h 文件中并且工作得很好,像这样已经做过一次了
    • 如果main.c没有访问struct estado的定义,那么它就无法知道如何访问matriz。您当前的标题只说有一个结构,而不是它的构造方式。在某些情况下,您可以只使用指向不完整类型的指针,但取消引用它们不是这样的情况。
    • @LeonardoMaia 要将问题标记为已解决,请选择对您最有帮助的答案,然后按其左侧的绿色勾号。另外,提示:回复某人的评论时(不在他们自己的帖子下)使用@username;否则用户可能不会收到通知。
    • @LeonardoMaia 你说你以前做过这个。我认为您之前所做的与您在这里的示例略有不同。我建议您仔细查看以找出差异。或者,如果您看不到它们,请发布一个新问题。
    【解决方案2】:

    如果你没有在标题中定义结构,你最终会得到一个不透明指针,这样结构内的任何东西都会对其他翻译单元隐藏。

    你总是可以在头文件中声明一些访问函数

    typedef struct estado Estado; // <- Not a pointer
    
    Estado *alloc_estado(void);
    void print_row(Estado *e, int i);
    // ...
    

    .c 文件中定义它们

    #include "estado.h"
    
    struct estado
    {
        char modo;
        char jogador;
        char matriz[8][8];
        int pretas;
        int brancas;
    };
    
    void print_row(Estado *e, int i)
    {
        printf("%s\n", e->matriz[i]);
    }
    // ...
    

    并在main中使用

    #include "estado.h"
    
    int main(void)
    {
        Estado *pes = alloc_estado();
        // ...
        print_row(pes, 1);
        // ...
        free(pes);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 2016-01-21
      • 2022-01-09
      • 2016-02-12
      • 2011-05-04
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多