首页 > 解决方案 > 如何避免仅在 C++ 标头库中重新定义类/变量

问题描述

我正在编写一个基于 OpenVPN3 的库,它是 C++ OpenVPN 客户端实现,仅在标头中,没有 cpp 文件。因此,我不得不依赖只有一个 cpp 文件,即客户端本身,其中包含一个包含大量其他标头的标头。

问题是,正因为如此,我无法将代码分成多个 cpp 文件。我希望人们能够使用我的库,无论是由他们预编译还是编译,但它们不能在超过 1 个 cpp 文件中包含相同的头文件,或者在链接过程中会有很多重新定义。例如,标题中还有一些静态变量。

如果有人想查看添加到“主”头文件中的内容数量:https ://github.com/lucaszanella/libopenvpn3/blob/9b3440a736d90b671e9376d2d9e4911475e07112/src/OpenVPNClient.hpp

我知道有一些像 Asio 这样的库也只有标头,每个人都可以毫无问题地使用它们。

一些不重新定义类或函数的技术是转发声明它们但不给出定义,但这里的问题是使用我的库的人将不得不访问它的方法和所有内容。是否可以将我的方法与我的库在标题上使用的方法分开?

标签: c++openvpn

解决方案


您可以放在#pragma once文件的最顶部以避免由于被定义两次而导致相同的类冲突


推荐阅读