0
我正在写一个解析表达式到一个树结构的库,我有一个抽象类型QCExpressionNode
作为我的基类。它看起来像这样:抽象类(Qt)的'未定义引用vtable'
#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
当我编译一些测试(在QtCreator另一个项目)的子类的工作(QCConstantNode
,QCVariableNode
,QCBinaryOperatorNode
,等等),链接给我一个未定义引用的vtable“ QCExpressionNode错误。我究竟做错了什么?
我不熟悉C++和Qt开发,那么在这种情况下实际发生的头文件是什么? – 2011-03-23 00:51:01
@Oswald:这是非常没用的*不*编译头文件,并且他没有一个以外的包括守卫。通常情况下,你需要编写一个“通过代理”的头文件,通过#include将其包含在一个“源”文件中,该文件的预处理后的剩余部分被编译器阶段所占用。不过,我不明白这与此有关。 – 2011-03-23 00:56:25
除了我不知道Q_DECLARE_INTERFACE扩展到什么外,您的类是完全定义的,编译它应该会导致目标代码,就像它在任何其他C++文件中定义一样。这只是头文件没有这样使用。头文件包含在其他文件中以使其定义知道其他文件。如果你想在许多其他源文件中使用'QCExpressionNode'类型的对象,这就派上用场了。 – Oswald 2011-03-23 00:57:32