关于学校古老的作业
本文旨在解决做作业中遇到的莫名其妙的错误。
本文包含VS和VC++6一些差别上的处理
1. 调用scanf()报错:
Severity Code Description Project File Line Suppression State
Error C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. HW_datastruct c:\users\yu\source\repos\hw_datastruct\hw_datastruct\main.cpp 39
如日志所述:这个函数不安全,请使用scanf_s代替。如果实在要使用,请使用 _CRT_SECURE_NO_WARNINGS 禁用该警告。
由于我们只是做作业,所以直接禁用是最好的。由于使用了#define预处理指令,所以这个禁用语句不会使 不支持该语句的编译器 报错,如gcc MSVC6++内置的cl编译器
解决方案:在文件最顶部使用
#define _CRT_SECURE_NO_WARNINGS
禁用该警告。
2. 关于#include "sqlist.cpp"
首先,引号表示优先在当前目录搜索
所以:把sqlist.cpp放在同目录下,再打开含main()的cpp源文件 【此时IDE会自动检测并添加sqlist.cpp到依赖里】
如果已经把sqlist添加到了源文件而非依赖区,右击改文件——从项目排除
VS(VC++6) 通用,不会有LNK2005报错。
关于此处的LNK2005分析:应该是mian()中include了sqlist,正常情况下sqlist就不需要编译,但由于缺乏认知,我把sqlist添加到了 工程源文件Source Files(这个是会被IDE直接编译的)
所以导致了main编译完成后再编译sqlist,
而"main中include的部分" 是和main一起编译链接并生成main.exe的,所以才会提示main.obj里和sqlist冲突