0
표현식을 트리 구조로 구문 분석하기위한 라이브러리를 작성하고 있으며 기본 클래스로 추상 유형 QCExpressionNode
을 사용하고 있습니다. 나는 몇 가지 테스트 (등 QCConstantNode
, QCVariableNode
, QCBinaryOperatorNode
등) (QtCreator에서 다른 프로젝트) 서브 클래스에 그 일을 컴파일 할 때추상 클래스 (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
, 링커가 나에게 'vtable에 정의되지 않은 참조를'제공 : 그것은 다음과 같습니다 QCExpressionNode에 대한 오류. 내가 도대체 뭘 잘못하고있는 겁니까?
저는 C++ 및 Qt 개발에 익숙하지 않으므로 실제로 그 상황에서 헤더 파일이 어떻게됩니까? –
@Oswald : 헤더 파일을 컴파일하는 데 꽤 쓸데 없지만 * 그는 외부의 가드를 포함하지 않습니다. 일반적으로 "프록시"헤더를 "소스"파일에'#include '하여 헤더를 컴파일합니다. 소스 파일은 컴파일러 단계에서 사전 처리 된 나머지 부분을 먹습니다. 그래도 그게 어떻게 관련이 있는지 모르겠다. –
'Q_DECLARE_INTERFACE'가 확장되는 것을 알지 못하는 것 외에도 클래스가 완전히 정의되어 있고 컴파일하면 다른 C++ 파일에 정의 된 것처럼 오브젝트 코드가 생성되어야합니다. 헤더 파일이 그런 식으로 사용되지 않는다는 것입니다. 헤더 파일은 정의를 다른 파일에 알리기 위해 다른 파일에 포함됩니다. 많은 다른 소스 파일에서'QCExpressionNode' 유형의 객체를 사용하려는 경우 유용합니다. – Oswald