gpt4 book ai didi

c++ - 如果 .h 包含在多个 .cpp 中,.h 中的结构不起作用?

转载 作者:太空狗 更新时间:2023-10-29 21:39:54 24 4
gpt4 key购买 nike

我想在多个 .cpp 中使用此回调对象,但如果我包含不止一次,VS 会给出“找到一个或多个多重定义的符号”错误。

#ifndef HEADER_H
#define HEADER_H

typedef struct {
void(__cdecl *callbackOne)(bool val);
void(__cdecl *callbackTwo)(bool val);
void(__cdecl *callbackThree)(bool val);
} Callbacks;
Callbacks callbacks;

#endif

最佳答案

Callbacks callbacks;

这是一个定义。由于 #include 的工作方式类似于文本替换,因此在包含您的 header 的每个源文件中,都会定义一个(单独的、不同的)结构实例。

因此,当最终将编译后的目标文件链接在一起时,每个目标文件都包含一个自己的实例和关联的符号 callbacks,从而导致所描述的链接器错误。

要拥有结构的单个实例,您需要将上述定义放入单个源文件中。

为了能够从其他源文件中使用该实例,他们需要能够引用它(“知道它的名字”)。这就是声明(“给一个名字”)的目的:

extern Callbacks callbacks;

这是您需要放入页眉中的内容。

关于c++ - 如果 .h 包含在多个 .cpp 中,.h 中的结构不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com