“对 vtable 的未定义引用”对于抽象类(Qt)
我正在编写一个用于将表达式解析为树结构的库,并且我有一个抽象类型 QCExpressionNode 作为我的基类。它看起来像这样:
#ifndef QCEXPRESSIONNODE_H
#define QCEXPRESSIONNODE_H
#include <QString>
class QCExpressionNode
{
public:
virtual ~QCExpressionNode() {}
virtual float evaluate(float* x) = 0;
virtual bool containsVariable() = 0;
virtual QString infixNotation() = 0;
};
Q_DECLARE_INTERFACE(QCExpressionNode, "org.nathanmoos.qcalc.libexprtree-qt.QCExpressionNode/0.1")
#endif // QCEXPRESSIONNODE_H
当我编译一些适用于子类(QCConstantNode
、QCVariableNode
、QCBinaryOperatorNode
等的测试(QtCreator 中的另一个项目)时) on),链接器为我提供了 QCExpressionNode 的“对 vtable 的未定义引用”错误。我做错了什么?
I'm writing a library for parsing expressions into a tree structure and I have an abstract type QCExpressionNode
as my base class. It looks like this:
#ifndef QCEXPRESSIONNODE_H
#define QCEXPRESSIONNODE_H
#include <QString>
class QCExpressionNode
{
public:
virtual ~QCExpressionNode() {}
virtual float evaluate(float* x) = 0;
virtual bool containsVariable() = 0;
virtual QString infixNotation() = 0;
};
Q_DECLARE_INTERFACE(QCExpressionNode, "org.nathanmoos.qcalc.libexprtree-qt.QCExpressionNode/0.1")
#endif // QCEXPRESSIONNODE_H
When I compile some tests (another project in QtCreator) that work on subclasses (QCConstantNode
, QCVariableNode
, QCBinaryOperatorNode
, and so on), the linker gives me a 'undefined reference to vtable' error for QCExpressionNode. What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
#include
,那么该文件应该可以正常编译。 <代码>Q_DECLARE_INTERFACE 在
QtPlugin
中声明。顺便说一句:单独编译头文件是很不寻常的,并且在头文件外部包含包含保护也是不寻常的。
#include <QtPlugin>
, then the file should compile just fine.
is declared inQ_DECLARE_INTERFACE
QtPlugin
.By the way: it's quite unusual to compile header files by themselves and it's unusual to have include guards outside header files.