编译时显示的错误:
引起该错误的原因:
在stadfx.h中#include <xx.cpp>引发的错误
解决方法:
不要在stadfx.h中#include <xx.cpp>
解决思路过程:
查看报错原因,可发现基本上每条错误都是含有信息“already defined in stdafx.obj”,那就可以考虑一下是不是在stdafx.h或stdafx.cpp上出了问题。
先弄懂stdafx.h:
stdafx.h并不是标准C++头文件,也就是说,该文件本质上相当于自定义的一个头文件。标准应用程序框架头文件。存放一系列头文件、预处理指令、结构体、联合、枚举定义等,便于管理代码。
从内容上来说,头文件stdafx.h是
1.包含标准头文件 ,就是这个头文件包含标准C的头文件,例如:stdio.h、string.h这些,这种做法实际在我们项目中很常见,把大部分.c文件需要的头文件,放在一个头文件中,这样只有include这一个头文件就行,省事
2.包含项目中的不会轻易改动的头文件
3. .h文件不直接参与源码编译,.cpp参与源码编译;因为.h文件不参与源码编译,所以在.h文件中不要写带内存的代码
stadfx.h的注意点:
#include"stdafx.h" 必须是所有的CPP实现文件第一条语句。因为在它前面的所有代码将被忽略,所以其他的头文件应该在这一行后面被包含。否则,你将会得到“No such file or directory”这样让你百思不得其解的错误提示。
在生成stdafx.h头文件的同时,也生成了stdafx.cpp源文件,该源文件只包含#include "stdafx.h"语句,这是在编译过程中第一个被编译的文件,编译的结果保存在一个名为stdafx.pch的文件里。 (扩展名pch表示预编译头文件。)当Visual C++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。 Visual C++不再分析Windows include文件,除非用户又编缉了stdafx.cpp或stdafx.h。
综上,该错误是因为不了解stdafx.h,导致在stdafx.h中包含cpp文件。因此在每个#include <stdafx.h>的cpp文件中都会再编译一次stdafx.h中包含的cpp文件,导致重复定义。
以上是我的个人理解,若理解有误,欢迎指正。