带有 QGraphicsView 子类的构造函数上的 LNK2019
Posted
技术标签:
【中文标题】带有 QGraphicsView 子类的构造函数上的 LNK2019【英文标题】:LNK2019 on constructor with QGraphicsView subclass 【发布时间】:2014-07-17 16:44:24 【问题描述】:我可能遗漏了一些明显的东西,但我无法摆脱 Qt 用户界面中的链接错误。
我已经隔离了导致问题的部分。基本上,我正在实现QGraphicsView
的子类来显示交互式开销图。由于某种原因,我无法解析构造函数。
OverheadMap.h:
#ifndef OVERHEADMAP_H
#define OVERHEADMAP_H
#include <QGraphicsView>
class OverheadMap : public QGraphicsView
Q_OBJECT
public:
OverheadMap();
;
#endif // OVERHEADMAP_H
OverheadMap.cpp:
#include "OverheadMap.h"
OverheadMap::OverheadMap()
// Body
main.cpp:
#include "OverheadMap.h"
int main(int argc, char *argv[])
OverheadMap *map = new OverheadMap();
LNK2019:
main.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall OverheadMap::OverheadMap(void)" (??0OverheadMap@@QAE@XZ) referenced in function _main
我可以毫无问题地使用带有OverheadMap
的 QtCreator 的自动完成功能,并且我已经完成了一个类似的 QFrame 子类实现,它正在工作,所以我怀疑这里有语法错误。
我错过了什么?
谢谢。
【问题讨论】:
而文件OverheadMap.cpp
在您的项目中并且正在构建中?
确保您已经为您的项目重新构建了 Qt 生成的文件。任何新类在拥有自己的文件之前都不会理解像 Q_OBJECT 这样的 Qt 语法。
如果您检查构建日志,您会发现它实际上是在没有错误或警告的情况下构建的?
@AlexisLeclerc:你的项目文件在哪里?不幸的是,我至少不能在 Linux 上重现这个问题。你的代码对我来说很好,但我还是为你重新打开了。并不是说您应该抛弃 Qt 父/子机制。
感谢您的时间和帮助,现在我的完整代码可以工作了。我所缺少的只是一个愚蠢的 qmake 来重新建立构建路径!
【参考方案1】:
这段代码对我来说很好用。
因此,解决方案是您必须重新运行 qmake,因为根据您的 cmets,您修改了项目结构而没有告诉 qmake。
【讨论】:
【参考方案2】:你需要调用你的基类的构造函数
OverheadMap::OverheadMap() : QGraphicsView()
// Body
【讨论】:
我还是有同样的问题。 这个答案是错误的。如果是空列表,则不需要。以上是关于带有 QGraphicsView 子类的构造函数上的 LNK2019的主要内容,如果未能解决你的问题,请参考以下文章