zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Qt常见bug

BUGQt 常见
2023-09-11 14:20:39 时间

一、bug

更换环境后,最好把pro.user删除,让其重新生成。
更改build构建目录

0.Qt报错:error: No rule to make target ‘XXX.cpp‘, needed by ‘debug/XXX.o‘.Stop.
解决:
检查pro文件中将SOURCES文件和HEADERS文件,是否实际文件与.pro里需要导入的文件不一致,是否有缺少。
注意:pro文件中的头文件和源文件需要按序,且不能重复。

1.E:\Edward\RxfFile.cpp:429: error: C2259: “CPdfDoc”: 无法实例化抽象类
错误原因:基类中有部分纯虚函数,没有在派生类中实现
具体原因:基类CXPdfdoc中有纯虚函数print没有在派生类CPdfdoc中实现,要补上。
具体改正:派生类CPdfdoc的定义在CPdfdoc.h中61行加入virtual void print(QWidget *p);


2.moc_HyeToolBar.obj : error LNK2001: 无法解析的外部符号 “public: void __thiscall HyeToolBar::OnVerifySignature(void)” (?OnVerifySignature@HyeToolBar@@QAEXXZ)
错误原因:函数OnVerifySignature在HyeToolBar.h头文件中声明了,但没有在实现文件HyeToolBar.cpp中实现
具体操作:在HyeToolBar.cpp的 307行加入

void HyeToolBar::OnVerifySignature()
{
if (!m_view)
  return;
m_view->OnVerifySignature();
}


3.没有找到重载的成员函数
错误原因:头文件的类里声明的函数,在实现文件[:类名函数名]里没实现,或者参数不一致。(声明的时候无参,实现的时候带参,这就不是同一个函数了)
在sr.h中定义的成员函数没有参数int add();
而在sr.cpp中成员函数实现中,又出现了参数int sr::add(S& a)
这是一个函数吗?参数到底是应该有,还是应该没有?


4.out-of-line definition of ‘FileWrite’ does not match any declaration in ‘CCommonUse’
(类中的声明,和函数的实现匹配不一致。 out-of-line:不一致)
错误原因:调用了未定义的内容或函数。这个函数的参数应该是和声明的不一样或者函数名字没有被声明,去类的定义哪里看看有没有声明这个函数
解决方法:检查函数或数据拼写和定义

总结:1-4都是函数声明与实现不一致造成的,原因相同,报错形式多种多样。


5.Cannot find file: E:\桌面\core\DesktopEditor\doctrenderer\app_builder\docbuilder.pro.
10:40:44: 进程"D:\QtCreator\Qt5.9.0\5.9\mingw53_32\bin\qmake.exe"退出,退出代码 2 。

Error while building/deploying project docbuilder (kit: Desktop Qt 5.9.0 MinGW 32bit)
When executing step “qmake”
错误原因:Qt项目路径不能有中文名
在这里插入图片描述


6.切换项目要重新 qmake、重新构建、再运行
不然切换了项目运行的结果还是之前项目的bug。具体原因:默认的build构建目录路径一般是上级目录。直接运行可能会使用之前项目构建好的build目录内容。所以,要么qmake + rebuild。要么就把之前生成的debug_build和release_build删除(也是重新生成新项目的build)。


7.UOS环境下qmake报错:警告:覆盖关于目标的配方(overriding recipe for targets)
在这里插入图片描述
错误原因:.pro文件中重复载入了某文件.h或者.cpp。
解决:删除其中一个,不要重复载入。

我的具体解决(具有特殊性,每个人要具体情况具体分析.pro文件里重复的部分是哪块):.pro文件结尾几行,默认所有平台都导入文件的部分注释掉
在这里插入图片描述
然后qmake就是绿色通过了,不再报错了。(不过在Win10上,没有注释掉这里,qmake也没报错。不明白UOS报错的原因)

8.经典错误**No such file or directory**
先用Everything/FSearch搜索一下是否有这个文件。若文件不存在那肯定就错了啊,若文件存在则检测是否是文件添加的路径问题
在Windows下的Qt,就找目标文件所在的路径,添加到.pro文件里的INCLUDEPATH += 绝对路径 / 相对路径 $$PWD/xxxxxx
一定要格外注意自己指代的路径 $${ }是否有误


9.unterminated conditional directive
原因:#ifdef 缺少对应的#endif
解决方法:添加#endif


10."qualified-id in declaration before (’ token"
可能会有一堆这种报错。要从第一个开始报错的地方往前找。问题就是前面漏了右小括号 ) ,或者右中括号 } 。或者左小括号,左中括号。


11.file not recognized: File truncated错误:
原因:这种错误一般是编译数据被截断或则编译过程中发生异常退出系统导致数据丢失;
解决:clean - qmake - 重新构建(rebuild)


12.野指针导致段错误(弹窗)

Signal received
The inferior stopped because it received a signal from the Operating System.
Signal name : SIGSEGV
Signal meaning : Segmentation fault

分析:可能是:①指针未初始化 ②指针指向临时变量,临时变量消亡后指针随即变为野指针。
解决:找到野指针出现的位置,想办法解决







二、warning

1.WARNING C4828: 文件包含在偏移 0X34B 处开始的字符,该字符在当前源字符集中无效(代码页 65001)
有一些.h头文件的编码格式是GB2312,改为UTF-8格式即可

修改编码格式方法,Visual Studio高级保存选项:https://www.freesion.com/article/2000991189/


2.warning C4290: 忽略C++ 异常规范,但指示函数不是__declspec(nothrow)
在文件开头加上宏

#pragma warning (disable:4290)

参考来源:https://blog.csdn.net/linshixina/article/details/7815132/


3.warning: C4715: 不是所有的控件路径都返回值
就是没有考虑到所有情况的return,把这些情况也补上return即可