如何修复结构的不完整类型

时间:2019-03-26 21:29:32

标签: c

由于老师的要求,基本上我正在此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'的指针取消引用”

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您未在标头中定义结构,则最终将得到一个 opaque 指针,这样该结构内部的内容对于其他翻译单元都是隐藏的。

您总是可以在标头中声明一些访问器函数

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);
}