【发布时间】:2021-01-21 14:16:34
【问题描述】:
我有以下几点:
abstract.h
typedef struct s_strukt strukt;
abstract.c
typedef struct s_strukt {
int x;
} strukt;
use_abstract.c
#include <stdio.h>
#include "abstract.h"
int main() {
strukt s;
s.x = 0;
return 0;
}
编译,(gcc use_abstract.c) 或 (gcc use_abstract abstract.c) use_abstract.c 导致以下错误:
gcc use_abstract.c
use_abstract.c:6:12: error: variable has incomplete type 'strukt' (aka 'struct s_strukt')
strukt s;
^
./abstract.h:1:16: note: forward declaration of 'struct s_strukt'
typedef struct s_strukt strukt;
^
1 error generated.
如何在use_abstract.c中使用strukt的定义?
编辑: 我不想在头文件中定义结构,因为我想为不同的 .c 文件创建不同的定义。
Edit2(因为人们正在阅读 wayyyyy 到问题的“重点”而不是受到智力刺激):
目标
(1) 在头文件中声明一个结构体(本例为abstract.h)
(2) 在 .c 文件(本例为 abstract.c)中定义结构属性
(3) 在一个新的 .c 文件中使用上面的定义(本例中 use_abstract.c 访问 abstract.c 中定义的结构,在 abstract.h 中声明)
【问题讨论】:
-
您在头文件
abstract.h中定义struct,而不是在一个C 文件中。 -
您可以使用指向 strukt 的指针。但是,您不能分配此类指针,也不能取消引用它们。但是,您可以将它们存储在内存中并将它们传递给其他函数。
-
@dmuir 你是什么意思,你能举个例子吗?最好基于我的最小可重现示例。
-
在 abstract.c 中有这样的
typedef是没有意义的。 typedef 不会在 abstract.c 文件之外“看到”。 -
@pointersarehard 在下面的评论中你写了 “我将在不同的 .c 文件中创建不同的结构”:你需要告诉我们更多关于这个的信息; Edit 问题。另请阅读:The XY Problem
标签: c abstract-class abstract-data-type