未解析的外部符号:QMetaObject const QwtPlotMagnifier::staticMetaObjec
Unresolved external symbol: QMetaObject const QwtPlotMagnifier::staticMetaObject
我有一个使用 QwtPlotMagnifier 以及其他 Qwt 类的库。我决定对 QwtPlot 放大镜进行子类化,以便在重新缩放绘图时发出信号。库(mylib.lib(可以编译,但使用它的应用程序现在抱怨与QwtPlotMagnifier的moc输出相关的未解析外部。
我静态链接qwt;因此在最低级别的库中QWT_DLL预处理器指令的要求在这里不适用。
这是错误(子类称为绘图放大镜(:
mylib.lib(moc_PlotMagnifier.obj) : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlotMagnifier::staticMetaObject" (?staticMetaObject@QwtPlotMagnifier@@2UQMetaObject@@B)
子类声明没有什么特别之处:
#pragma once
#include "qwt_plot_magnifier.h"
/**
subclass of QwtPlotMagnifier to provide a signal when zooming is complete
*/
class PlotMagnifier : public QwtPlotMagnifier
{
Q_OBJECT
public:
explicit PlotMagnifier(QWidget *w);
virtual ~PlotMagnifier();
signals:
void rescaled();
protected:
virtual void rescale(double factor);
};
我在Visual Studio 2013 fwiw上。我的应用程序仍然像往常一样包含qwtd.lib。这一定是我愚蠢的错误。请启动我的大脑,有人!
将此行添加到 .pro 文件,以便为编译器提供外部符号的提示:
DEFINES += QWT_DLL
在文件中qwt_global.h
有宏。如果没有此宏,编译器将认为这是一个内部符号。
检查,如果你的Visual Studio项目中有所有需要的包含。
C/C++ / Additional Include Directories
这里应该是一条<qwt_dirinclude>
的道路
Linker / General / Additional Library Directories
这里应该是一条<qwt_dirlib>
之路
Linker / Input
应包括qwtd.lib
(用于debug
配置(和qwt.lib
(用于release
(
此外,请检查您是否在Release
和Debug
配置中具有这些条目,在处理Release
配置时,很容易仅Debug
配置
另外,检查您是否在项目视图中的Generated Files
下为您的PlotMagnifier
moc_*
文件(类似moc_plotmagnifier.cpp
(,有时Qt addin无法添加它们。