Как исправить неполный тип структуры - PullRequest
1 голос
/ 27 марта 2019

В основном я запускаю этот код в этом приложении CLion из-за требований моего учителя.

Моя структура 'Estado' определена в файле .c следующим образом:

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 ]

1 голос
/ 27 марта 2019

Если вы не определите структуру в заголовке, вы получите непрозрачный указатель , так что все, что находится внутри этой структуры, будет скрыто от других единиц перевода.

Вы всегда можете объявить некоторые функции доступа в заголовке

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);
}
1 голос
/ 27 марта 2019

Вы должны поместить объявление struct в файл .h вместо файла .c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...