【问题标题】:Issues trying to inherit QLCDNumber in Qt尝试在 Qt 中继承 QLCDNumber 的问题
【发布时间】:2013-01-24 06:35:34
【问题描述】:

这是我从 QLCDNumber 继承的自定义 LCD 类。

myLCD.h:

#ifndef MYLCD_H
#define MYLCD_H

#include <QLCDNumber>

class MyLCD : public QLCDNumber
{
    Q_OBJECT

public:
    MyLCD(QWidget* parent=0);


};


#endif // MYLCD_H

myLCD.cpp:

#include "MyLCD.h"


MyLCD::MyLCD(QWidget* parent)
    :QLCDNumber(parent)
{}

没有比这更基本的了..

在我的 main.cpp 文件中,我包含 "myLCD.h" 并且一切正常。

但是当我尝试实例化一个 myLC​​D 对象时:

MyLCD* lcd = new MyLCD;

我遇到以下问题:

  • *main.obj:-1:错误:LNK2019:未解析的外部符号“public: __thiscall MyLCD::MyLCD(class QWidget *)" (??0MyLCD@@QAE@PAVQWidget@@@Z) 引用在函数_main*中

  • debug\partie2.exe:-1: error: LNK1120: 1 unresolved externals

知道那可能是什么吗?


编辑:我正在使用 QtCreator

edit 2) : 这是编译结果的输出

14:33:28: Running steps for project partie2...
14:33:28: Configuration unchanged, skipping qmake step.
14:33:28: Starting: "C:\Qt\Qt5.0.0\Tools\QtCreator\bin\jom.exe" 
    C:\Qt\Qt5.0.0\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
    echo 1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ "debug\\partie2.exe.embed.manifest">debug\partie2.exe_manifest.rc
    if not exist debug\partie2.exe del debug\partie2.exe.embed.manifest>NUL 2>&1
    if exist debug\partie2.exe.embed.manifest copy /Y debug\partie2.exe.embed.manifest debug\partie2.exe_manifest.bak
    link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST /MANIFESTFILE:debug\partie2.exe.embed.manifest /OUT:debug\partie2.exe @C:\Users\val\AppData\Local\Temp\partie2.exe.10692.62.jom
main.obj : error LNK2019: unresolved external symbol "public: __thiscall MyLCD::MyLCD(class QWidget *)" (??0MyLCD@@QAE@PAVQWidget@@@Z) referenced in function _main
debug\partie2.exe : fatal error LNK1120: 1 unresolved externals
jom: H:\Fac\L3\S6\IHM\practical\Qt\TP2\sources\partie2\partie2-build-Desktop_Qt_5_0_0_MSVC2010_32bit_SDK-Debug\Makefile.Debug [debug\partie2.exe] Error 1120
jom: H:\Fac\L3\S6\IHM\practical\Qt\TP2\sources\partie2\partie2-build-Desktop_Qt_5_0_0_MSVC2010_32bit_SDK-Debug\Makefile [debug] Error 2
14:33:29: The process "C:\Qt\Qt5.0.0\Tools\QtCreator\bin\jom.exe" exited with code 2.
Error while building/deploying project partie2 (kit: Desktop Qt 5.0.0 MSVC2010 32bit (SDK))
When executing step 'Make'

【问题讨论】:

  • MyLCD 实现在哪里?在main.cpp 文件中?而且,我想应该是new MyLCD;(大写M),对吧?
  • 好编辑 :) 你如何链接?命令行,还是通过一些 IDE?链接器调用是什么样的?
  • 看起来您的 myLC​​D.cpp 文件可能没有进入构建过程?您是否看到它作为 QtCreator 中的源文件正确列出?如果没有,请添加并重建。
  • 您是否忘记了 Q_OBJECT 宏并稍后添加?如果是这样运行 qmake 然后构建。

标签: c++ qt inheritance qwidget lnk2019


【解决方案1】:

我回答了我自己的问题,因为这个错误在逻辑上无法回答..

我终于删除了我的 Debug 文件夹。

当我再次构建时,Debug 文件夹被创建回来并且没有显示任何问题。

我真的不知道是什么原因,因为我们什么时候应该在可靠的 IDE 中处理文件系统?

【讨论】:

  • 呃,我在 QtCreator 中遇到过很多次。完全重建甚至不能解决问题,您实际上必须删除 Debug/Release 文件夹才能正确链接所有内容。 Visual Studio 没有这个问题,它使用相同的编译器...
  • QtCreator 中有命令“run qmake”,我想这也解决了问题(?)我还没有使用这个编译,因为我总是构建并运行所有我之前的申请
猜你喜欢
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多