在没有多个定义的头文件中包含cpp文件

时间:2019-05-20 17:42:48

标签: c++ qt compiler-errors openvpn

我必须使用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文件,同时防止多定义错误?

1 个答案:

答案 0 :(得分:3)

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

#include "ovpncli.hpp"

并与ovpncli.cpp链接,但不要#include