编译问题汇总

QTcpSocket使用过程中的一些问题记录

error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall

在编写QT的程序时遇到该问题,可以参考的调查方向有两个

  • Q_OBJECT宏
  • 信号与槽的连接方式不正确

Qt在编译之前,首先要使用moc分析C++文件,如果文件中包含了Q_OBJECT宏,则会生成在原文件名钱添加moc_的新文件,该文件将进入编译系统,最终链接到二进制代码中。参考moc文件的生成方法。本次遇到的该问题是相关的头文件没有加入工程中,导致编译没有生成moc文件,经过手动将文件加入工程之后,编译OK。

手动添加前

HEADERS += \
    src/TCPLink.h \

手动添加后

HEADERS += \
    src/TCPLink.h

附:Error LNK2001 无法解析的外部符号 的几种情况及解决办法

Cannot retrieve debugging output

Qt编译运行一个没有问题,两个工程同时运行则会出现该问题。

QAbstractSocket::waitForBytesWritten() is not allowed in UnconnectedState

error: C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

两个头文件相关包含所致。a.h包含了b.h,同时b.h包含了a.h

error: LNK2019: 无法解析的外部符号

出现该问题是由于工程中包含了不识别的库文件。
相关的实现.h和.cpp没有加入工程
LNK2019问题出现的原因

error: C2039: “staticMetaObject”: 不是XXXX的成员

在Qt声明开始之前,添加Q_OBJECT,类中需要继承QObject,如果存在其他的继承,那么需要进行多种继承,且QO别处他需要放在前面。

C2143: 语法错误 : 缺少“;”(在“‘template<’”的前面)

出现这种问题在头文件中查找问题的原因。在本次我这边出现的原因是定义class的尾部没有添加;号

QThread: Destroyed while thread is still running

解决方法

vs编译出现未加载 wntdll.pdb

解决办法

C++中调用Python脚本提示 error LNK2001: 无法解析的外部符号__imp_PyString_FromString等错误的解决方案

出现该错误的原因是Python是64位的,VS编译选择的却是32位的,解决时,可以设置VS编译为64位,相关实践请参考下面的链接。
解决方法

Qt 运行出现Executable dm_01.exe does not exist

第一步:检查编译是否成功
第二步:确认编译的输出路径
第三步:检查qtcreator 工程设置里项目运行的位置是否和编译输出路径相同。

Binding loop detected for property

解决方法

你可能感兴趣的:(Qt编程,qt)