VS

您所在的位置:网站首页 vs运行不了cpp VS

VS

2023-10-01 18:36| 来源: 网络整理| 查看: 265

VS+QT需要获得.ui对应的ui_XXXX.h头文件的解决方法

解决办法:

(1)在 Qt5.11.2\5.11.2\mingw53_32\bin 目录下有对应的 uic.exe 用来生成 .ui 对应的 ui_XXXX.h 头文件,所以 cmd 进入 bin 目录,运行uic XXXX.ui ui_XXXX.h就可以生成。

(2)在 VS 下,右键 .ui 文件 -> "编译",就会生成对应的 ui_XXXX.h 头文件,但默认的 ui_XXX.h 输出目录是$(IntDir)\uic\%(RelativeDir),在工程所在的 Debug\uic 目录下,而实际需要修改在自定义的 GeneratedFiles 目录下,右键 .ui 文件 -> "配置属性" -> “uic”,修改输出目录为GeneratedFiles\。

QT -1: error: [debug/qrc_images.cpp] 异常解决

运行报错:

-1: error: [debug/qrc_images.cpp]

解决办法: 右键 .qrc 文件,点击 open in editor 后出现的红色就是误删遗留下来的问题,删掉重新编译即可。

LINK : fatal error LNK1158: 无法运行“rc.exe”

问题: 在用 VS2015 编译网上别人的源码时,出现了 LINK : fatal error LNK1158: 无法运行“rc.exe” 的问题。

解决方法: 打开 C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64 文件夹(找不到可以用 Everything 搜 "rc.exe"),复制里边的 “rc.exe” 和 "rcdll.dll",拷贝到 VS2015 的 VC 下的 bin 目录下,我的是 E:\technology\VS 2015\VC\bin,重新 build 即成功。 (这个问题应该是最近对 VS 进行过修改,或者环境变量变了,其实将这个路径加到环境变量的 PATH 中去也是可以的)

undefined reference to `vtable for’”问题的原因及解决方法

原因:

Qt 中,类要支持信号与槽机制,需要继承自 QObject 并在头文件开头添加 Q_OBJECT 宏。 如果使用 QtCreator 创建类时,没有选择继承自 QObject 类或其子类,而在创建后手工修改继承自 QObject 并手动添加 Q_OBJECT 宏,则在编译时有可能会出现 ”undefined reference to `vtable for’…….” 错误.

**解决方法: **

把新创建的类从项目中移除(主要不要从磁盘上删除),然后再添加进来,QtCreator就会重新解析此类,再编译就不再会出现上述错误。

Qt Creator提示无法用“UTF-8”编码解码,无法编辑

问题:

在 Qt Creator 里打开其他编辑器的代码时,有时会提示无法用 “UTF-8” 编码解码,无法编辑。

解决方法:

(1)找到源文件,在文件上右键使用 Notepad++ 编辑器打开,选择 ---> “编码” --->“转为UTF-8编码”。

(2)windows环境下,Qt Creator,菜单 -> 工具 -> 选项 -> 文本编辑器 ->行为 -> 文件编码:默认编码:System(简体中文Windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/windows-936)

error LNK2019: 无法解析的外部符号 __imp__recv@16,该符号在函数 _*** 中被引用

出现这个错误,一般都是缺少了相关的库文件,可以右键点击项目,选择属性,选择链接器,选择输入,选择附加依赖项,在依赖项里添加相应的库文件,这里是 ws2_32.lib 文件,然后就可以了。

error: unknown type name 'class' 的解决方法

编译工程时出现以下错误:

error: unknown type name 'class'

原因:

C 文件 include 了带有 C++ 关键字的头文件,如 class 等。因此,包含 C++ 关键字的头文件被 C 编译器所编译,而不是用 C++ 编译器编译,而 C 编译器无法识别 C++ 的关键字,所以报错。

解决方法:

1、不能在 C 文件中包含 C++ 的头文件,所以需要将 .c 改成 .cpp。

2、在所有使用 C++ 方法的地方加上:#ifdef __cplusplus,如:

#ifdef __cplusplus class A{ }; #endi

注:如果使用了 extern "C" ,也要加上 #ifdef __cplusplus,因为 C 编译器无法识别 extern "C"。

fatal error C1083: 无法打开包括文件:“unistd.h”: No such file or directory

许多在 Linux 下开发的 C 程序都需要头文件 unistd.h,但 VC 中没有个头文件,所以用 VC 编译总是报错。把下面的内容保存为 unistd.h,可以解决这个问题。

#ifndef _UNISTD_H #define _UNISTD_H #include #include #endif /* _UNISTD_H */ fatal error LNK1281: 无法生成 SAFESEH 映像

解决方法:

1.打开该项目的“属性页”对话框。

2.单击“链接器”文件夹。

3.单击“命令行”属性页。

4.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。

找不到Qt5Cored.dll

Qt5Cored.dll 和 Qt5Core.dll 文件分别用于 Qt 软件的 Debug 版和 Release 版。

通常会有两个 Qt5Core.dll 文件,分别位于 Qt 安装目录下的 “Qt5.11.2\5.11.2\mingw48_32\bin” 和 “\Qt5.11.2\Tools\QtCreator\bin” 两个目录中。其中 “Qt5.11.2\5.11.2\mingw48_32\bin” 目录下才是 Qt 项目运行时所需的库。

但是,有时候在运行 Release 版项目时,却提示没有找到 Qt5Cored.dll。这是由于在编译 Release 版时,错误的链接到了 Debug 版的库上。这种情况主要发生在使用了第三方软件库的时候,在编译第三方软件库时,Debug 版本库链接到 Qt 的 Qt5Cored.dll,而 Release 版链接到 Qt5Core.dll,如果在编译 Release 版项目时错误的链接了第三方软件库的 Debug 版,则也会间接的链接 Debug 版的相关支持库(如 Qt5Cored.dll),因此在运行项目时提示需要相关的 Debug 版支持库。

举个例子:在编译 Release 版项目时,工程文件中有 “#LIBS += D:/Qwt-6.1.0/lib/qwtd.dll”(这是 QWT 库,QWT 库需要 QT 库的支持),则在运行时提示 “找不到Qt5Cored.dll文件”,这时将其修改为 “#LIBS += D:/Qwt-6.1.0/lib/qwt.dll” 则解决问题。

正确解决:坑爹的0xc000007b——应用程序无法正常启动

(1)根本原因是缺乏所需要的 DLL,提供了错误版本的 dll 相当于没有 DLL, 提示完全一样。

(2)网上有人说缺乏 dx 运行环境,如果属实,也是因为缺乏 dx 相关的 dll。

(3)与程序是 32 还是 64 位没有直接关系,但是与你的程序对应不上的 dll 版本,往往很难发现问题,要引起注意。

(4)生成的 debug 目录下,运行 exe 文件报改错,将缺少的 dll 文件添加进来即可解决,例如 opencv_world411d.dll。

弹窗崩溃:abort() has been called 错误分析及其解决方法

调试代码的过程中经常会遇到 abort() has been called 的错误,导致出现这样的原因有:

(1)内存泄漏,导致内存不够分配;

(2)非法指针访问或者指针访问内存越界出现问题; (3)多线程访问资源出的问题。

参考:R6010 -abort() has been called错误分析及其解决方法

This application failed to start because it could not find or load the Qt platform plugin “windows” 错误解决方法

用 inno setup 打包生成了一个安装 exe,U 盘拷到另一台电脑安装运行,出现该错误!

根据错误提示发现是和 platform 有关,是因为前面误删了安装目录下的 platforms 文件夹以及其内部的 qwindows.dll,把 plugins/platform 这个文件夹原封不动地复制到安装包里再打包即可。

Qt中文乱码问题

方法一:

ui->pushButton->setText(QString::fromLocal8Bit("我是中文"));

方法二:

将默认字体设置为 UTF8,再配合 tr("我是中文") 就不会乱码啦。

解决Qt线程关闭问题!QThread: Destroyed while thread is still running

耗时操作里面这样判断:

while (!isInterruptionRequested())

添加析构函数,析构函数里面这样操作:

XXXThread:: ~XXXThread() { requestInterruption(); quit(); wait(); } 给放在 Program Files 目录下的 exe 添加写入权限

由于 exe 会在本目录下,写入 .ini 文件,如果把 exe 制作成安装包,会安装到 program files 目录下,但在 win10 下 program files 默认是没有写入权限的。

解决方法:

vs => 项目属性 =>配置属性 => 链接器 => 清单文件 =>UAC执行级别修改成 requireAdministrator。

error LNK2001:无法解析的外部符号_imp_timeGetTime@0

解决方法:将库winmm.lib添加到工程中。

参考:error LNK2001:无法解析的外部符号_imp_timeGetTime@0

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

加入头文件出现 chrono 和 ratio 的错误

在一个使用 FFmepg 的多线程工程中加入 librtmp 第三方开源库,在 chrono 和 ratio 中就会报二十多个错误,尤其是 C4430错误,“C4430 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int” 这个错误,在网上找了很多方法均不行,直到找到这个解决办法,前提是先include :

VS => 项目属性 =>配置属性 => C/C++ => 预处理器中加入: __STDC_LIMIT_MACROS

扩展:c++ - C++: __STDC_LIMIT_MACROS和__STDC_CONSTANT_MACROS意味著什麼?

__STDC_LIMIT_MACROS 和 __STDC_CONSTANT_MACROS 是一种解决办法,允许 C++ 程序使用标准中指定的stdint.h 宏,而不在 C++ 标准中。 宏( 如 UINT8_MAX 。INT64_MIN 和 INT32_C() ) 可能已经在 C++ 应用程序中定义为其他方式。 为了允许用户口決定是否需要为 C 定义宏,许多实现需要在 stdint.h 包含之前定义 __STDC_LIMIT_MACROS 和 __STDC_CONSTANT_MACROS 。

参考:

加入头文件出现ratio和chrono的错误

每个C11和C ++ 11,不应查看__STDC_LIMIT_MACROS或__STDC_CONSTANT_MACROS

ffmpeg Common.h error C3861: “UINT64_C”: 找不到标识符

解决方法:在 common.h 中添加如下代码:

#ifndef INT64_C #define INT64_C(c) (c ## LL) #define UINT64_C(c) (c ## ULL) #endif #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #ifdef _STDINT_H #undef _STDINT_H #endif # include #endif

顺便解决了fatal error C1189: #error : missing -D__STDC_FORMAT_MACROS这个错误。

ERROR: WriteN, RTMP send error 10054 (39 bytes)

时间戳过大会导致该错误。原先错误将时间戳单位弄错了,时间戳过大,大了 1000 倍导致的。

VS出现 fatal error C1083: 无法打开包括文件: “sys/socket.h”: No such file ....

因为 sys/socket.h 是 Linux 系统下的库文件,所以在 windows 上无法打开,用#include 替换即可。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3