#c
#c
Вопрос:
У меня есть структура, которая перенаправляется в file.h. Структура определена в file1.c. Я пытаюсь использовать структуру в file2.c. Но она выдает мне «ошибка: указатель разыменования на неполный тип» в file2.c.
file.h
typedef struct foo foo;
file1.c
#include <file.h>
typedef struct foo {
int val;
} foo;
file2.c
#include <file.h>
struct foo *f;
.
.
.
printf("%d", f->val); <--Error here
У меня не возникнет никаких проблем, если я определю структуру в file.h. Могу ли я как-нибудь использовать val в file2?
Ответ №1:
Это называется непрозрачным struct
, полезно, когда вы хотите защитить доступ к членам (своего рода частный спецификатор).
таким образом, только file1.c
вы можете получить доступ к элементам struct
, чтобы сделать его видимым для остальных файлов .c, которые вам нужно
1) Определите struct
внутри файла .h
или
2) Доступ к элементам через функцию:
//file.h
typedef struct foo foo;
int foo_val(const foo *);
//file1.c
#include "file.h" // Always prefer "" instead of <> for local headers
struct foo { // Notice that you don't need to retypedef the struct
int val;
};
int foo_val(const foo *f)
{
return f->val;
}
//file2.c
#include "file.h"
struct foo *f;
printf("%d", foo_val(f));