以下是自己在平时创建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++项目代码问题,之后遇到其他错误的话,我也会继续更新这个博客的。