我有一个在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中定义结构,我没有任何问题。我可以在file2中使用val吗?
答案 0 :(得分:4)
这称为不透明struct
,在您要保护对成员的访问(一种私有说明符)时很有用。
通过这种方式,只有file1.c
可以访问struct
的成员,以使其对您需要的其余.c文件可见
1)在.h文件中定义struct
或
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));