zoukankan      html  css  js  c++  java
  • vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误

    1、当vs2010编译qt时会出现以下错误:

               1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------
               1>生成启动时间为 2015/9/9 14:57:04。
               1>InitializeBuildStatus:
               1>  正在创建“DebugMyDialog.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
               1>CustomBuild:
               1>  Moc'ing LoginDlg.h...
               1>ClCompile:
               1>  LoginDlg.cpp
               1>  main.cpp
               1>  正在生成代码...
               1>LoginDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall CLoginDlg::metaObject(void)const " (?         metaObject@CLoginDlg@@UBEPBUQMetaObject@@XZ)
               1>LoginDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall CLoginDlg::qt_metacast(char const *)" (?qt_metacast@CLoginDlg@@UAEPAXPBD@Z)
               1>LoginDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall CLoginDlg::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@CLoginDlg@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
               1>D:VC++QtTMyDialog\MyDialog.exe : fatal error LNK1120: 3 个无法解析的外部命令
               1>
               1>生成失败。
               1>
               1>已用时间 00:00:03.23
                ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========

    2、出现以上错误的原因是由于在GeneratedFiles/Debug文件中缺少一个moc_XXX.cpp文件,如下图所示:

    3、缺少的文件名是什么呢?那么首先要找到Q_OBJECT宏在那个头文件中,比如在上图中该宏在LoginDlg.h文件中,那么生成的文件时moc_LoginDlg.cpp,要生成此文件需要qt库中的一个moc.exe文件,如下图所示:

     

    4、通过cmd进入到此目录中,然后执行:moc "D:VC++QtTMyDialogMyDialogLoginDlg.h" -o "D:VC++QtTMyDialogMyDialogmoc_LoginDlg.cpp"

    如下图所示:

     

    5、然后会在D:VC++QtTMyDialogMyDialog目录生成一个moc_LoginDlg.cpp文件,如下图所示:

     

    6、将moc_LoginDlg.cpp文件拷贝到GeneratedFiles/Debug目录中,并在vs中添加该文件,如下图所示:

     

    7、重新编译即可

  • 相关阅读:
    HDU4565
    CF861D
    UVA 11651
    HDU5950
    POJ3267
    POJ1094
    POJ1905
    HDU3567
    进程的同步与互斥
    预防死锁,检测死锁,避免死锁,解除死锁....
  • 原文地址:https://www.cnblogs.com/lovebay/p/9337528.html
Copyright © 2011-2022 走看看