“对 vtable 的未定义引用”对于抽象类(Qt)

发布于 2024-10-25 02:57:15 字数 699 浏览 2 评论 0原文

我正在编写一个用于将表达式解析为树结构的库,并且我有一个抽象类型 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

当我编译一些适用于子类(QCConstantNodeQCVariableNodeQCBinaryOperatorNode 等的测试(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

毁梦 2024-11-01 02:57:15

#include,那么该文件应该可以正常编译。 <代码>
Q_DECLARE_INTERFACE 在 QtPlugin 中声明。

顺便说一句:单独编译头文件是很不寻常的,并且在头文件外部包含包含保护也是不寻常的。

#include <QtPlugin>, then the file should compile just fine.
Q_DECLARE_INTERFACE
is declared in 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文