首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt metaObject链接器问题

Qt metaObject链接器问题
EN

Stack Overflow用户
提问于 2011-07-11 01:56:37
回答 8查看 32.9K关注 0票数 21

在集成Qt和Vs并尝试编译.pro文件后,我得到了以下错误:

代码语言:javascript
复制
Error   9   error LNK2001: unresolved external symbol "public: virtual int __thiscall Multiplication_dialog::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Multiplication_dialog@@UAEHW4Call@QMetaObject@@HPAPAX@Z)     

Error   7   error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Multiplication_dialog::metaObject(void)const " (?metaObject@Multiplication_dialog@@UBEPBUQMetaObject@@XZ)  


    Error   8   error LNK2001: unresolved external symbol "public: virtual void * __thiscall Multiplication_dialog::qt_metacast(char const *)" (?qt_metacast@Multiplication_dialog@@UAEPAXPBD@Z)    

该如何处理这些内容?

EN

回答 8

Stack Overflow用户

发布于 2011-07-11 02:03:06

当项目中没有编译/链接foo.h的moc_foo.cpp (它包含用Q_OBJECT标记的类)时,通常会出现这些错误。

要使Qt项目在VS中工作,请执行以下操作

  1. 使用'qmake -tp vc‘或
  2. 创建一个-tp文件使用Qt Visual Studio外接程序自动为您处理所有moc魔法(但不适用于VC速成版)。

使用外接程序时,您可以通过以下方式触发moc_foo.cpp的创建

确保有问题的对象的头文件出现在VS

  • 列表项中

  • 从文件的头文件中删除所有出现的Q_OBJECT

  • add Q_OBJECT

  • 保存文件

现在,在解决方案资源管理器中的"Generated Files“文件夹中应该有两个版本的moc_multiplication_dialog.cpp。一个是"Debug“,一个是"Release”。确保其中一个文件没有被排除在构建之外。

票数 17
EN

Stack Overflow用户

发布于 2014-02-25 17:26:04

我今天遇到了同样的链接器错误,但这是由于一个小错误:

我手动将cpp/ui文件添加到我的项目中,但是忘记显式地将头文件添加为头文件。现在,在编译时,我收到了与上面类似的错误消息,并且在构建的调试(或发布)目录中没有生成moc_*.cpp文件。这不是一个明显的错误,qmake没有抱怨,除了链接器消息之外,我没有收到任何错误。

因此,如果任何人再次遇到相同的问题(或者犯了相同的复制错误):,请确保头文件也已添加到项目文件

票数 15
EN

Stack Overflow用户

发布于 2012-07-04 12:43:16

引用自“使用Qt4进行C++图形用户界面编程”一书(第19页):为了让moc正常工作,我们必须将类定义放在一个头文件中,独立于实现文件。所以,你需要为你的类写两个文件: Multiplication_dialog.h和Multiplication_dialog.cpp!而且你必须重新创建makefile!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6642823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档