C++项目的报错经历及解决之法

2023-11-01

以下是自己在平时创建C++项目遇到的一些问题,记录在此:

2021年4月13日——问题集锦

编译环境是VS2019,新建一个C++空项目;

1、无法打开头文件xxx.h
注:此处的头文件是我通过“添加现有项”所加入项目的。

#include<search.h>//search是我自己定义的头文件

做法一:项目->xxx属性->C/C+±>常规->附加包含目录->点击编辑-> 添加 $(头文件所在路径名)

效果:无效,我个人认为原因可能是C/C++中的这个目录里面存放的是一些系统库的路径,而这个头文件是我自己定义的。
在这里插入图片描述
做法二:在项目->xxx属性->VC++目录->包含目录->编辑-> 添加$(头文件所在路径名)
效果:无效,emmmmmm,可能原因如上?
在这里插入图片描述
做法三:新建头文件和代码文件,复制粘贴。
效果:

  • 包含头文件处语句不报错,但是无法正确使用头文件中定义的类和包含的库函数
  • 选择快速修复错误,有一个选项是添加#include"xxx.h",进行添加之后,无语法报错。
    为了明白这里改错的机制,我查找了一下#include<>和#include
    " "的区别,简单说明如下
#include< file >编译程序会先到标准函数库中找文件 
#include”file” 编译程序会先从当前目录中找文件,一般适用于自己定义的头文件

那么,我就想:“那我为什么不能删掉代码中的#iinclude<>呢?我分明没有使用到这个语句呀,search.h又不是一个标准函数库。”

  • 我删除了#include<search.h>,但是仍然出现了“无法正确使用头文件中定义的类和包含的库函数”的错误,经过多次删减操作,我发现,只有#include<>和#include""都存在的时候,才会不报错,删除任意一个,都会产生报错。
  • 再之后,我查阅了一下search.h,发现它是一个标准库函数文件,也就是说,我定义的头文件和标准库函数文件重名了。
  • 改变了我的头文件名,使用#include"xxx.h",之后便没有出现刚才的情况.

2、fopen报错
错误 C4996 ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

做法一:项目 ->属性->c/c++ ->预处理器->点击预处理器定义,编辑,加入_CRT_SECURE_NO_WARNINGS(最好在第一行添加,可能存在优先级问题)
效果:无效,原因不明
在这里插入图片描述

做法二:
在#include语句前,添加语句

#define _CRT_SECURE_NO_WARNINGS

效果:顺利解决问题

3、使用了未初始化的局部变量“ch”
这里是编写代码的逻辑问题,由于要对一行语句逐字读入,所以使用了while循环,循环以ch的值作为判断依据。但是一开始,ch并没有初始化,这对于第一次的循环判断来说,是无解的。
做法如下

char ch;//此处不正确
while(ch !='#'){
	//do something
}

更改为:

char ch= ' ';//初始值改为空
while(ch !='#'){
	//do something
}

4、项目生成解决方案之后,窗口打开闪退

做法一:在退出程序的语句,例如return 0;前添加语句

system("pause");

效果:无效;这是一个我经常会遇到的错误,一般都是加上这个语句即可,但是这里不行,很奇怪,仔细对比了该项目的退出语句,可能是因为它使用的退出语句是exit(0);
以下是三类退出语句的不同:

exit(0):正常运行程序并退出程序;

exit(1):非正常运行导致退出程序;

return():返回函数,若在主函数中,则会退出函数并返回一值。

我的做法是将exit(0);注释掉,程序无法在某些条件退出程序,之后便可以解决这个问题。
问题解决之后,出现了如5所示的问题,这也是窗口闪退的原因——打开文件失败,在没有注释代码之前,程序在这一阶段立刻退出。

5、文件打开失败
一开始,我的测试文件是在另一个文件夹下面的,我使用的是绝对路径,但是一直出错,我就试着将测试文件移动到了本项目的Debug目录下,也就是可以使用相对路径进行文件打开。
在项目中,打开文件的函数是fopen();
但是这样依然会出现“文件打开错误”的提示,究其原因,我发现是我文件命名的问题。
原始的文件命名为xxx.txt,查阅网上的一些讨论之后,fopen使用相对路径打开一个文件时,“.txt”部分是它的属性,而不是文件名部分,因此,我将文件更名为xxx,在运行窗口输入:

xxx.txt

便可以正常打开文件。

————以上就是我2021年4月13日遇到的C++项目代码问题,之后遇到其他错误的话,我也会继续更新这个博客的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++项目的报错经历及解决之法 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 西米支付:支付宝/微信支付/银联支付通道的接入介绍

    本文以电脑网站支付为例 着重对第三方支付通道的接入进行了分析 包括支付宝支付接入 微信支付接入及银联支付接入 1 支付宝支付接入 支付宝支付能力主要有当面付 刷脸付 App支付 手机网站支付 电脑网站支付和花呗分期等 本文采用电脑网站支付实
  • 手机远程唤醒 android,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan – 全栈笔记...

    一 需求分析 我的电脑一般都是24小时候开机的 方便远程操作 但是这样 一是比较浪费电 二是对电脑硬件也或多或少有些影响 所以就需要远程开机 目前远程开机有很多种方式 1 智能插线板 可以远程控制插板的通电和断电 并在BIOS中设置来电开机
  • No.6 907. 子数组的最小值之和(python)

    给定一个整数数组 arr 找到 min b 的总和 其中 b 的范围为 arr 的每个 连续 子数组 由于答案可能很大 因此 返回答案模 10 9 7 示例 1 输入 arr 3 1 2 4 输出 17 解释 子数组为 3 1 2 4 3
  • B站快捷键-切换上一集,切换下一集

    切换上一集 快捷键 切换下一集 快捷键
  • Linux平台卸载MySQL总结

    如何在Linux下卸载MySQL数据库呢 下面总结 整理了一下Linux平台下卸载MySQL的方法 MySQL的安装主要有三种方式 二进制包安装 Using Generic Binaries RPM包安装 源码安装 对应不同的安装方式 卸载
  • Vue 引入 icon 图标

    安装 npm install vue svg icon save dev 使用 1 阿里巴巴矢量图 选择需要的字体修改参数 选择SVG下载 2 IcoMoon 点击右上角 icoMoon App 点击左上角 Import Icons 选择下
  • 【FICO系列】SAP 创建会计凭证(FB01)的BAPI

    公众号 SAP Technical 本文作者 matinal 原文出处 http www cnblogs com SAPmatinal 原文链接 FICO系列 SAP 创建会计凭证 FB01 的BAPI 前言部分 大家可以关注我的公众号 公
  • TCP+UDP通信实验

    一 实验要求 1 基于服务器的客户端相互直接通信 具体要求包括 2 Server支持多客户访问 3 C与S之间使用TCP连接 4 C与C之间直接通信 不是通过S传递 5 C与C之间直接通信既可以使用TCP 也可以使用UDP 6 可以使用So
  • 放弃手中Docker拥抱下一代容器管理工具Podman

    关注 WeiyiGeek 公众号 将我设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 0x00 基础介绍 前生今世 0x01 安装试用 Ubuntu Podman 命令 容器管理工具 0x02 小试牛刀 1 Podma
  • 进程和线程的深入理解

    进程和线程的深入理解 下面是抽象类比 单CPU 一台单核处理器计算机 一个车间 多CPU 一台多核处理器计算机 一座工厂 进程 一个车间 一个进程 即一个运行的程序 多进程 一座工厂可以同时运行多个车间 CPU和进程 单CPU只能同时运行单
  • XSS、SSRF、CSRF、XXE 漏洞的区别

    XSS 跨站脚本攻击 XSS属于客户端攻击 受害者最终是用户 但特别要注意的是网站管理员也属于用户之一 这就意味着XSS可以进行 服务端 攻击 因为管理员要比普通用户的权限大得多 一般管理员都可以对网站进行文件管理 数据管理等操作 而攻击者
  • CTF赛制介绍&工具介绍

    CTF基本赛制与题型 语言环境的安装 常见工具的简介与安装 什么是CTF CTF Capture The Flag 中文一般译作夺旗赛 在 网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式 CTF起源于1996年DEFCO
  • 解决‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

    python开发安装第三方库时 很多人选择在cmd终端用命令行pip进行安装 然而有时敲入pip命令会提示 pip 不是内部或外部命令 也不是可运行的程序 或批处理文件 为何会出现此类问题呢 一般都是因为系统环境变量没有配置好 推荐链接 电
  • Educational Codeforces Round 113 (Rated for Div. 2)

    A Balanced Substring 题意 字符串 s 由字符 a 和 b 构成 寻找 s 的子串 s l r 使得子串中字符 a 和 b 的数量相同 输出 l r 思路 范围很小 暴力解决 求出 s 子串 s 0 i 中字符 a 和
  • 线性代数——正交矩阵

    正交矩阵 orthogonal matrix 正交矩阵的定义 正交矩阵性质 1 AT是正交矩阵 2 A的各行是单位向量且两两正交 3 A的各列是单位向量且两两正交 4 A 1或 1 正交矩阵的定义 如果 AAT E E为单位矩阵 AT表示
  • @Autowired的使用:推荐对构造函数进行注释

    在编写代码的时候 使用 Autowired注解是 发现IDE报的一个警告 如下 Spring Team recommends Always use constructor based dependency injection in your
  • 机器学习特征选择:传统互信息、k-nearest neighbor互信息

    目录 传统互信息 Estimating Mutual Information中的的两种基于最近邻的互信息 Mutual Information between Discrete and Continuous Data Sets论文中提到的互
  • C51单片机中常用的头文件

    C51中常用的头文件有51 h 52 h math h intrins h absacc h stdio h stdlib h ctype h 其中51 h 52 h是定义特殊功能寄存器和位寄存器的 math h是定义数学运算的 求方根 正
  • Keil 仿真退出时出现“encountered an improper argument” 解决办法

    keil仿真退出时出现 encountered an improper argument 错误 先取消断点 再按取消仿真按钮
  • C++项目的报错经历及解决之法

    以下是自己在平时创建C 项目遇到的一些问题 记录在此 2021年4月13日 问题集锦 编译环境是VS2019 新建一个C 空项目 1 无法打开头文件xxx h 注 此处的头文件是我通过 添加现有项 所加入项目的 include