c++ - 在 C++ 中的多个文件中包含单个 header 库

标签 c++ svg include

我正在编写应用程序来转换 SVG自定义结构以供进一步使用。为了将 SVG 文件解析为 C++ 结构,我使用了 nanosvg库,写在单个头文件中(声明和实现)。

实现由 #define NANOSVG_IMPLEMENTATION 启用这使得编译器能够读取实现。

问题是,我想将这个库包含在跨项目的多个文件中(在路径、形状等各种结构中),所以我只是 #include <nanosvg/nanosvg.h> ,但这使得它只导入声明。但是定义 NANOSVG_IMPLEMENTATION使其跨项目声明,所以现在每个#include <nanosvg/nanosvg.h>还包括函数体,这会使编译器抛出很多错误。

我想把类分开,只是为了更容易进一步修改(在项目树中查找文件名比 F12 快得多 - 将所有内容都放在底部,并想知道该文件是否确实包含该类) ,所以我还没有决定将所有内容都合并到一个文件中。 有什么方法可以限制#define 的“影响范围”,这样每个文件都会单独加载,或者有什么方法可以“一次性”加载一次吗?

最佳答案

C++(和 C 一样)使用单独编译的模型。每个翻译单元都是独立编译的,然后将结果链接在一起。实际上,每个 .cpp 文件及其所有 header 构成一个翻译单元。

因此,您需要在一个 .cpp 文件中包含一个 #define NANOSVG_IMPLEMENTATION。就这么简单。这可以很简单

#define NANOSVG_IMPLEMENTATION
#include <nanosvg/nanosvg.h>

仅此而已。

关于c++ - 在 C++ 中的多个文件中包含单个 header 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58232738/

相关文章:

c++ - 在哪些情况下 (const) 引用返回值是不安全的?

c++ - 指示编译时调用了什么构造函数

c++ - 在 C++ Windows 应用程序中嵌入和扩展的简单解释器

html - 页面刷新时过渡持续时间不起作用

svg - 在 Inkscape 中将 SVG 批量转换为 PNG 不起作用

c++ - QSvgRenderer - 尽管有 defaultSize(),但 svg-items 的正确渲染?

html - 如何在 HTML BASE 标记后使用本地 URL

c++ - 将内存复制到 std::copy

c++ - 全局使用公共(public)变量

c - 编译时出错(可能包含不止一次一个函数)