C++Qt | 无法打开源文件:“x64\Debug\moc_xxx.cpp”怎么办。

简介: 编译时报错: 1>c1xx : fatal error C1083: 无法打开源文件:“x64\Debug\Res\src\Vlc\include\moc_AVPlayer.cpp”: No such file or directory的解决办法。

最近遇到一个问题,希望可以有大佬可以探讨一下。

环境:VS2017+Qt5.14.2; 工具->扩展和更新->Qt Visual Studio Tools->版本:2.5.1

项目中添加了一个纯C++类的.h和.cpp,为了可以在这个类中使用Qt的信号槽机制,将.h中的纯C++类继承QWidget,并且在类中添加Q_OBJECT。

曾经使用的Qt Visual Studio Tools版本是2.7.1,编译运行是没有问题的,后改成版本2.5.1后出现以下错误:

编译时报错: 1>c1xx : fatal error C1083: 无法打开源文件:“x64\Debug\Res\src\Vlc\include\moc_AVPlayer.cpp”: No such file or directory。

moc_AVPlayer.cpp文件是在程序编译过程中动态生成的,经过查找发现moc_AVPlayer.cpp文件是成功生成了的,但是生成的路径是x64\Res\src\Vlc\include,生成路径和报错路径不一致,

正常情况下,moc_.cpp文件应该生成在x64\Debug\moc或x64\Release\moc目录下,不知道为什么这个文件的生成路径和其他文件的生成路径不一致,并且生成成功后,编译找的路径不对。

解决办法: 将生成的moc_.cpp放到指定目录下,再编译就成功了。但是这个方法没办法从根上解决这个问题,一旦这个文件发生变化的时候,还需要再手动将moc_.cpp放到指定目录下。

之前遇到过类似情况,解决办法是:在VS中选中该文件的.h,右键打开属性,将常规中的项类型改为其他编译正常的文件的项类型,就可以了。但是这个文件的属性中的项类型,以及项类型的详细信息的设置都和其他文件一模一样,尝试过1.将文件改名重新加入;2.重新设置文件属性;3重新添加文件后编译都不行。感觉是工具集版本不一致造成的,但是具体原因和解决办法还是没有找到。

总结:如果没有成功生成moc_xxx.cpp文件,应该在VS中选中该文件的.h,右键打开属性,将常规中的项类型改为其他编译正常的文件的项类型。 如果成功生成了moc_xxx.cpp文件,只是编译路径与生成路径不符,应该手动将生成的moc_.cpp放到指定目录下。

如果有更好的解决办法,希望可以在评论区聊一下!

目录
相关文章
|
2月前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
67 1
|
2月前
|
安全 网络协议 数据安全/隐私保护
掌握Qt和C++:构建你的第一个P2P应用程序
掌握Qt和C++:构建你的第一个P2P应用程序
151 3
|
2月前
|
编译器 API C语言
深入探究Qt与C++标准的兼容之旅
深入探究Qt与C++标准的兼容之旅
216 3
|
2月前
|
设计模式 缓存 编译器
【C++ 元对象系统03】深入探索Qt反射:从原理到实践
【C++ 元对象系统03】深入探索Qt反射:从原理到实践
108 4
|
2月前
|
存储 算法 API
【Qt 基本类】QDateTime类在C++中的应用与深度解析
【Qt 基本类】QDateTime类在C++中的应用与深度解析
81 0
|
2月前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
161 0
|
2月前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
194 0
|
2月前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
604 0
|
2月前
|
编译器 API 数据安全/隐私保护
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
172 3
|
27天前
|
数据处理 开发工具 C++
Qt C++ 扫码枪使用数据处理
Qt C++ 扫码枪使用数据处理