将Qt与Vs集成并尝试编译.pro文件后,我遇到以下错误:
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)
该怎么办?
答案 0 :(得分:17)
当您的项目中没有编译/链接foo.h的moc_foo.cpp(其中包含标有Q_OBJECT的类)时,您通常会收到这些错误。
要让Qt项目在VS中运行,你可以
使用加载项时,您可以通过
触发创建moc_foo.cpp现在,您应该在解决方案资源管理器的“生成的文件”文件夹中有两个版本的moc_multiplication_dialog.cpp。一个用于“调试”,一个用于“释放”。 确保其中一个文件不从构建中排除。
答案 1 :(得分:14)
我今天遇到了相同的链接器错误,但这是由于一个小小的错误:
我手动将cpp / ui文件添加到我的项目中,但忘记将头文件显式添加为头文件。现在编译时我收到了类似的错误信息,并且在构建的调试(或发布)目录中没有生成moc _ * .cpp文件。 这不是一个明显的错误,qmake没有抱怨,除了链接器消息我没有错误。
因此,如果有人再次遇到同样的问题(或者造成相同的副本和错误): 确保标题文件也已添加到项目文件中
答案 2 :(得分:6)
Citate from book“C ++ GUI Programming with Qt 4”(第19页):要使moc正常工作,我们必须将类定义放在头文件中,与实现文件分开。 因此,您需要为您的类编写2个文件:Multiplication_dialog.h和Multiplication_dialog.cpp!你必须重新创建makefile!
答案 3 :(得分:4)
那么今天我遇到了同样的问题。我知道线程很老了。但它可能仍然可以帮助某人。
在我的案例中发生了什么moc
正在生成moc_ .cpp
文件但VC不知道它也必须编译它们。所以我手动添加了那些moc生成的文件,以便编译。它工作。
答案 4 :(得分:2)
我目前正在使用带有QT 5.4插件的VS 2013。使用加载项构建项目可以更轻松地自动处理moc。为了防止Qt元对象问题的链接器错误问题:
在类声明中包含它的所有头文件中注释掉所有Q_OBJECT实例。
构建解决方案
取消注释头文件中所有Q_OBJECT实例。
重建解决方案。这是所有所有头文件和cpp文件都被重新编译的地方,moc'ing自动完成。链接器错误依次被处理。
答案 5 :(得分:1)
当我使用Qt Addin for VS时出现同样的问题,我在构建之后看到了moc文件are not included into project
。我将它们包含在项目中这些错误消失了。
答案 6 :(得分:0)
尝试重新启动项目的 .pro 。
答案 7 :(得分:0)
上面有些相当冗长的解释。
在菜单栏上使用Qt Creator:
构建>运行qmake
Build>全部构建