我必须使用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文件,同时防止多定义错误?
答案 0 :(得分:3)
该类的定义位于ovpncli.hpp
中,而不是ovpncli.cpp
中。 (Yes, really)因此,只需按预期的方式使用标题系统即可。
#include "ovpncli.hpp"
并与ovpncli.cpp
链接,但不要#include
。