访问另一个插件中的类时出错(错误:未定义的引用)

时间:2017-03-16 09:28:38

标签: 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

我错了什么?

提前谢谢大家。

1 个答案:

答案 0 :(得分:1)

未定义的引用是链接错误。您需要链接到您的插件库。

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

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

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