Qt:LNK2001和LNK2019 跨源文件实现信号/时隙后会出现错误

Qt: LNK2001 and LNK2019 Errors arise after implementing a signal/slot across source files

本文关键字:时隙 错误 信号 实现 LNK2001 LNK2019 源文件 Qt      更新时间:2023-10-16

这包括我的 MainWindow 文件中的声明,为了简洁起见,我没有包含库包含。我已经在两者和所有必需的库中都包含了 QObject.h。在包含第二个连接调用之前,它编译得很好。第一个 Ctrl-C 处理程序工作正常。

I took out my code, thought my employer wouldn't like it. See the appropriate response below!

我正在使用QT创建器。当我用谷歌搜索这些错误消息时,提供的大多数解决方案都围绕着修复make命令/路径或在Visual Studio中编译时发生的那种东西。

我重申,这些错误仅在包含全局GCamera和MainWindow的第二次连接调用后才出现。在此之前,该程序正在编译和运行。

提前感谢您,对于冗长的帖子,我深表歉意,并期待收到任何意见。

你应该有一个名为 moc_tcamera.cpp 的文件来实现构建目录中缺少的符号。

如果它不存在,你应该"运行qmake",然后"重建"你的项目(这两个操作都在Qt Creator Build菜单中)。

发生错误的原因:

qmake为所有包含宏Q_OBJECTQ_GADGET的源文件在Makefile中添加了一个moc(Qt的元对象编译器)步骤,这样的文件被称为"mocable"。一旦文件被检测到为mocable或non-mocable,该状态不会更改,直到重新运行qmake。

QtCreator 仅在 .pro 文件更改时(例如,当您添加或删除文件时)自行运行 qmake。

这意味着您可能在文件tcamera.h中没有Q_OBJECT宏的情况下编译了一次项目,然后添加了该宏。而且因为在你添加对connect的调用之前你不需要元对象,所以VC++没有尝试解决缺少的符号。

例如,当您在 .pro 文件中包含标头而不是源时,可能会出现链接器错误。例如,在您的 .pro 文件中:

HEADERS += t_camera.h foo.h
SOURCES += foo.cpp 

会导致链接器错误,通常是LNK2001和LNK2019。但是,IIRC QtCreator为您管理.pro文件,对吗?换句话说,请确保您的 .pro 文件正确无误。如果不是,我会感到惊讶,但是.pro文件中的错误可能会导致您看到的问题。