gpt4 book ai didi

c++ - 在没有多重定义的头文件中包含一个cpp文件

转载 作者:行者123 更新时间:2023-11-30 02:15:24 27 4
gpt4 key购买 nike

我必须使用 C++ OpenVPN3 library开发具有 OpenVPN 功能的 Qt 应用程序。问题是我需要创建一个派生自 QObject 和该库提供的抽象类的类。

class Client : public QObject, public ClientAPI::OpenVPNClient {
Q_OBJECT
{
. . .
}

我需要使用的所有类型都保存在一个名为 ovpncli.cpp 的大源 (cpp) 文件中。当我现在在头文件中包含一个源文件时,这就成了问题,因为当编译器生成翻译单元时,它会导致多重定义错误。从 QObject 继承的类也必须有一个单独的定义和实现,除非你在末尾添加“include myclass.moc”(但这对我不起作用,如 here 所示)。库开发人员除了“将 OpenVPN 头文件仅放在我的类的实现文件中”之外没有说太多,但这是不可能的,因为类定义继承自仅在 `ovpnfile 中定义的类。

有没有一种方法可以在头文件中包含一个 cpp 文件,同时防止多重定义错误?

最佳答案

该类的定义在 ovpncli.hpp 而不是 ovpncli.cpp 中。 ( Yes, really ) 因此,只需按照预期的方式使用 header 系统即可。

#include "ovpncli.hpp"

并链接到ovpncli.cpp但不要#include它。

关于c++ - 在没有多重定义的头文件中包含一个cpp文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56225794/

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