其他源文件中定义的 extern vars 和 struct

发布于 2024-12-20 03:46:59 字数 389 浏览 0 评论 0原文

有两个带有结构定义的文件。标头:

typedef struct _InputData InputData;
extern InputData input_data;

和源文件:

struct _InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};
InputData input_data = {...};

当我尝试使用其他源文件中的 input_data 时,它给我“无效使用不完整的 typedef 'InputData'”。我想我明白为什么会发生这种情况,但我该如何以最优雅的方式处理它。

Have two files with struct definitions. Header:

typedef struct _InputData InputData;
extern InputData input_data;

and source file:

struct _InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};
InputData input_data = {...};

When i try to use input_data from other source file it gives me "invalid use of incomplete typedef ‘InputData’". I think i understand why it happened, but how i can deal with it in the gracefullest way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白云不回头 2024-12-27 03:46:59

您必须在头文件中定义完整的结构。否则无法知道它有哪些字段,即它是不完整的。

You have do define the complete structure in the header file. Otherwise there is no way to know what fields it have, i.e. it's incomplete.

真心难拥有 2024-12-27 03:46:59

您可以(或多或少)执行此方法,但您需要将结构定义为指针:

extern struct InputData* input_data;

源文件:

struct InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};

InputData* input_data; 
...
input_data = malloc(sizeof(InputData)); 

You can do this approach (more or less), but you need to define the struct as a pointer instead:

header

extern struct InputData* input_data;

source file:

struct InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};

InputData* input_data; 
...
input_data = malloc(sizeof(InputData)); 
从来不烧饼 2024-12-27 03:46:59

您可以使用指向其他地方定义的struct 的指针,但不能使用实例。编译器不知道这样的变量的结构是什么以及如何计算内存偏移量。

为什么将struct定义放在C文件中?把它放在标题中。

You can use a pointer to a struct defined elsewhere, but not an instance. Compiler doesn't know what is the structure and how to calculate memory offsets for such a variable.

Why do you put the struct definition in the C file? put it in the header.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文