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