• 8899阅读
  • 7回复

【提问】lnk2001问题 [复制链接]

上一主题 下一主题
离线flyingwind
 
只看楼主 倒序阅读 楼主  发表于: 2005-11-09
我在继承自qt designer做的界面的.h文件中加上 宏Q_OBJECT,就出现这样问题,怎么回事呢?
大道泛兮,其可左右!
离线XChinux

只看该作者 1楼 发表于: 2005-11-09
信息太少,继续加信息啊。
否则无法诊断
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线flyingwind
只看该作者 2楼 发表于: 2005-11-09
以下是出错信息:
addentity.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall addEntity::qt_property(int,int,class QVariant *)" (?qt_property@addEntity@@UAE_NHHPAVQVariant@@@Z)
addentity.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall addEntity::qt_emit(int,struct QUObject *)" (?qt_emit@addEntity@@UAE_NHPAUQUObject@@@Z)
addentity.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall addEntity::qt_invoke(int,struct QUObject *)" (?qt_invoke@addEntity@@UAE_NHPAUQUObject@@@Z)
addentity.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall addEntity::qt_cast(char const *)" (?qt_cast@addEntity@@UAEPAXPBD@Z)
addentity.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall addEntity::className(void)const " (?className@addEntity@@UBEPBDXZ)
addentity.obj : error LNK2019: 无法解析的外部符号 "public: static class QMetaObject * __cdecl addEntity::staticMetaObject(void)" (?staticMetaObject@addEntity@@SAPAVQMetaObject@@XZ) ,该符号在函数 "public: virtual class QMetaObject * __thiscall addEntity::metaObject(void)const " (?metaObject@addEntity@@UBEPAVQMetaObject@@XZ) 中被引用
debug\secconfig_d.exe : fatal error LNK1120: 6 个无法解析的外部命令
为了能写slot我在 addentity.h的开始使用了宏Q_OBJECT,如下:
class addEntity : public addUserForm
{
     Q_OBJECT
public:
     addEntity(/*const secconfig::SecurityPtr& sec */);
     ~addEntity();
如果不加Q_OBJECT的话,就可以通过。不过不能用slot
大道泛兮,其可左右!
离线icekernel
只看该作者 3楼 发表于: 2005-11-10
可能是你链接的时候没有加qt的库。
离线flyingwind
只看该作者 4楼 发表于: 2005-11-10
下面是引用icekernel于2005-11-10 09:36发表的:
可能是你链接的时候没有加qt的库。

加了,只是在继承的头文件中加上Q_OBJECT才会有这个问题,否则的话,正常。
大道泛兮,其可左右!
离线guxingke
只看该作者 5楼 发表于: 2005-11-11
你肯定没有生成.moc文件,所以回报这些错误。通常qt为使用信号和槽机制的类生成对应的.moc文件,你只要重新执行 qmake然后nmake问题就解决了
离线kevinlynx

只看该作者 6楼 发表于: 2006-06-11
乱说~~~~我也遇到了这个问题,在论坛查了查,看到这个帖子。又是这种人-------就知道猜~~为什么在发帖子前你不先实践下你的想法,确认你的看法是正确后再发上来呢? 猜来猜去,根本帮不了别人。楼上的解释全不对。
离线bitstar

只看该作者 7楼 发表于: 2006-11-20
我也遇到此问题,但很快就解决了。
方法:
一、在DOS提示符下重新进行:
1.qmake -project
2.qmake
3.nmake

第3步的DOS下,我也会有与你们一样的问题,不过我的提示是error:LINK2019 无法解析的外部符号

二、我用的是.net集成环境进行开发的,在其project中的Generated MOC Files中添加(所有的在DOS下可见的moc_*.cpp文件)现有项.

三、重新生成,如果还有类似问题,则提示不应该是error:LINK2019 无法解析的外部符号 qt_emit之类,而是你确实还有些自己的slot没有实现,编程实现之即可。


DOS下的nmake能调用moc.exe帮助你生成最新版本的moc_*.cpp,而集成环境下“重新生成解决方案”好象不行,这是问题症结所在。应该说楼上的guxingke先生说的是正确的。
[ 此贴被bitstar在2006-11-20 09:26重新编辑 ]
快速回复
限100 字节
 
上一个 下一个