Qt:LNK2001和LNK2019在源文件中实现信号/插槽后出现错误

时间:2012-05-10 00:16:08

标签: c++ qt linker qt-creator

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

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

我正在使用QT Creator。当我搜索这些错误消息时,提供的大多数解决方案都围绕修复make命令/路径或在Visual Studio中编译时出现的类型。

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

提前感谢您,我为这篇冗长的帖子道歉,并期待收到任何意见。

2 个答案:

答案 0 :(得分:5)

您应该有一个名为moc_tcamera.cpp的文件,它在构建目录中实现了缺少的符号。

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

为何发生错误:

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

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

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

答案 1 :(得分:1)

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

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

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