gpt4 book ai didi

c++ - 为什么包含 stb_image 时 header guard 无效?

转载 作者:行者123 更新时间:2023-11-28 01:34:36 25 4
gpt4 key购买 nike

我想使用 stb_image 库,作者已经把它放到了一个非常大的头文件中。要使用该库,文档告诉我将这两行添加到我的代码中。

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

我就是这么做的,把它放到一个头文件中;我什至确保它包含了 guard 。

#ifndef STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#endif

但是链接器提示了。

我查找并找到解决方案。 https://github.com/nothings/stb/issues/3

基本上,我必须将上面的两行添加到 cpp 文件而不是头文件。它就像一个魅力。但是为什么这样的头球后卫没有效果呢?我一直在阅读有关翻译单元和静力学的信息,但我无法理解为什么我的方法不起作用。

最佳答案

stb_image.h 有自己的 include guards。这不是定义 STB_IMAGE_IMPLEMENTATION 的目的。定义 STB_IMAGE_IMPLEMENTATION 告诉 stb_image.h 不仅包括声明,还包括定义它的函数和变量到该翻译单元。如果 stb_image.h 包含在多个定义了 STB_IMAGE_IMPLEMENTATION 的翻译单元中,那么所有这些翻译单元都将具有 stb_image 的函数和变量的定义,并且违反了单一定义规则。

关于c++ - 为什么包含 stb_image 时 header guard 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49868674/

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