[Qt4]VS2010编译提示error LNK2001: unresolved external symbol "public: virtual struct QMetaObject等错误解决方案
来源:互联网 发布:java代理模式 编辑:程序博客网 时间:2024/06/05 11:51
刚学习Qt4编程,在编译一个小程序的时候出现了链接错误。
报错如下
1>—— 已启动全部重新生成: 项目: Test, 配置: Debug x64 ——
1> FindDialog.cpp
1> main.cpp
1> Generating Code…
1>FindDialog.obj : error LNK2001: unresolved external symbol “public: virtual struct QMetaObject const * __cdecl FindDialog::metaObject(void)const ” (?metaObject@FindDialog@@UEBAPEBUQMetaObject@@XZ)
1>FindDialog.obj : error LNK2001: unresolved external symbol “public: virtual void * __cdecl FindDialog::qt_metacast(char const *)” (?qt_metacast@FindDialog@@UEAAPEAXPEBD@Z)
1>FindDialog.obj : error LNK2001: unresolved external symbol “public: virtual int __cdecl FindDialog::qt_metacall(enum QMetaObject::Call,int,void * *)” (?qt_metacall@FindDialog@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
1>FindDialog.obj : error LNK2001: unresolved external symbol “public: static struct QMetaObject const FindDialog::staticMetaObject” (?staticMetaObject@FindDialog@@2UQMetaObject@@B)
1>FindDialog.obj : error LNK2019: unresolved external symbol “protected: void __cdecl FindDialog::findNext(class QString const &,enum Qt::CaseSensitivity)” (?findNext@FindDialog@@IEAAXAEBVQString@@W4CaseSensitivity@Qt@@@Z) referenced in function “private: void __cdecl FindDialog::findClicked(void)” (?findClicked@FindDialog@@AEAAXXZ)
1>FindDialog.obj : error LNK2019: unresolved external symbol “protected: void __cdecl FindDialog::findPrevious(class QString const &,enum Qt::CaseSensitivity)” (?findPrevious@FindDialog@@IEAAXAEBVQString@@W4CaseSensitivity@Qt@@@Z) referenced in function “private: void __cdecl FindDialog::findClicked(void)” (?findClicked@FindDialog@@AEAAXXZ)
1>C:\Users\Grey\Desktop\Test\x64\Debug\Test.exe : fatal error LNK1120: 6 unresolved externals
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
原因
对于所有定义了信号和槽的类,在类定义的开始处的Q_OBJECT宏都是必需的。由于FindDialog类的定义包含Q_OBJECT宏,因而由qmkae生成的makefile将会自动包含一些运行moc的规则,moc(meta-object compiler)是Qt的元对象编译器。
Qt的元对象系统
Qt的主要成就之一就是使用了一种机制对C++进行了扩展,并且使用这种机制创建了独立的软件组件。这些组件可以绑定在一起,但任何一个组件对于它所要连接的组件的情况事先都一无所知。这种机制称为元对象系统(meta-object system),它提供了关键的两项技术:信号-槽以及内省(introspection)。内省功能对于实现信号和槽是必需的,并且允许应用程序的开发人员在运行时获得有关QObject子类的“元信息”(meta-infomation),包括一个含有对象的类名以及它所支持的信号和槽的列表。这一机制也支持属性(广泛用于Qt设计师中)和文本翻译(用于国际化),并且它也为QtScript模块奠定了基础。从Qt4.2开始,可以动态添加属性。
标准C++没有对Qt的元对象系统所需要的动态元信息提供支持。Qt通过提供一个独立的moc工具解决了这个问题,moc解析Q_OBJECT类的定义并且通过C++函数来提供可供使用的信息。由于moc使用纯C++来实现它的所有功能,所以Qt的元对象系统可以在任意C++编译器上工作。
由于程序中使用了Q_OBJECT宏来定义类,所以必须运行moc来生成用于由Q_OBJECT声明的所有函数和所有信号的实现。
解决方案
将cmd目录跳到工程文件目录下,然后执行cmd命令(moc.exe是Qt下的工具,执行命令前保证Qt的bin目录已经添加到系统环境变量PATH中):
moc FindDialog.h –o moc_FindDialog.cpp
同目录下会生成一个moc_FindDialog.cpp文件,将该文件添加到VS工程中即可编译通过。
- [Qt4]VS2010编译提示error LNK2001: unresolved external symbol "public: virtual struct QMetaObject等错误解决方案
- error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const
- error LNK2001: unresolved external symbol "public: virtual struct QMetaObject
- vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误
- error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const (转)
- 【qt错误】unresolved external symbol "public: virtual struct QMetaObject
- error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlot::staticMe
- error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlot::staticMe
- error LNK2001: unresolved external symbol "public: virtual enum TCPSError
- song2013 error LNK2001: unresolved external symbol "public: virtual
- error LNK2001: unresolved external symbol "protected: virtual struct AFX_MSGMAP ......
- 错误:error LNK2001: unresolved external symbol "public: __thiscall
- 错误提示:error LNK2001: unresolved external symbol "public: static int person::weight" (?weight@person@@
- error LNK2001: unresolved external symbol "public:
- error LNK2001: unresolved external symbol "public: __thiscall
- error LNK2001: unresolved external symbol \"public: __thiscall。。。
- QT中添加Q_OBJECT时编译提示obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const错误解决方法
- VC编译错误:error LNK2001: unresolved external symbol _GUID_DEVINTERFACE_USB_DEVICE
- Tensorflow + ImageNet Inception-v3 视频图像识别
- A Simple Problem with Integers (线段树 ) 区间更新 求和
- 计算机网络的基础知识
- 双线性插值
- 【Android】Android Studio 解决打包生成的apk安装到手机上出现闪退
- [Qt4]VS2010编译提示error LNK2001: unresolved external symbol "public: virtual struct QMetaObject等错误解决方案
- Struct2命令执行漏洞
- fatal error: libxml/parser.h: No such file or directory解决方法
- phpcms常用代码
- 并查集模板
- python 符合Python风格的对象
- 欢迎使用CSDN-markdown编辑器
- 解决winpcap中“error LNK2019: 无法解析的外部符号”的报错问题
- 凯撒密码