c++ - 访问另一个插件中的类时出错(错误 : undefined reference)

标签 c++ qt plugins

我正在尝试访问另一个插件中的类 MyExternalClass:

#include "../my_plugin/my_plugin.h"

MainWindow::MainWindow(QWidget *parent) :
    myExternalClass(new MyExternalClass)
{
}

在插件中

#include "my_plugin.h"

MyExternalClass::MyExternalClass(QWidget *parent)
{
}

但是,我得到了错误:

/path/mainwindow.cpp:31: error: undefined reference to `MyExternalClass::MyExternalClass(QWidget*)'

:-1: error: collect2: error: ld returned 1 exit status

我哪里错了?

提前谢谢大家。

最佳答案

undefined reference 是链接错误。您需要链接到您的插件库。

但这不是使用插件的一般方式。通常,主程序定义了一组头文件,这些头文件定义了一个通用接口(interface)。如果要让接口(interface)基类有功能,还应该提供一个库供插件库链接。如果您希望基类继承自 QWidget,您将需要提供一个库,因为 Qt 的自动生成方法。另一种方法是向插件询问 QWidget,然后通过信号/插槽进行通信,这样您就不需要提供库。

然后插件链接到该库,并定义从提供的接口(interface)继承的类。然后在运行时动态加载插件库,以某种方式获取它提供的接口(interface)对象,例如通过外部“C”方法,然后使用它进行通信。

此外,由于您的示例中有一个 QWidget,请查看 Qt manual对于插件。

关于c++ - 访问另一个插件中的类时出错(错误 : undefined reference),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42829990/

相关文章:

c++ - C++ 中的控制流语法

c++ - 在 Qt 中的大型项目中指定构建/目标/安装路径

c++ - Qt 桌面开发

unit-testing - 如何对使用插件方法的 grails 服务进行单元测试?

plugins - 如何在Elasticsearch Servlet中加载插件

c++ - 为什么必须在何处以及为什么要放置"template"和"typename"关键字?

c++ - 完全自定义 Qt Creator 编码风格?

c++ - 如果模板类型是另一个模板则运行代码

c++ - 提高 Qt 5.3 中随机数生成的质量

.net - 调用 Assembly.GetTypes() 时如何防止 ReflectionTypeLoadException