刚刚写C++程序时遇到了一个令人头疼的错误,搞了半天才解决,在这里分享给大家,如有相似情况可以试一下可不可以解决。
背景:
1.我写的程序中,有个文件有生成随机数这一过程,为了保证每次运行生成的随机数不同,我在这里引入windows.h头文件,然后获取系统时间的毫秒数值作为种子。
2.我在文件中还宏定义了一个常数N(如下图所示)。
问题:
运行后所报错误如下图所示,一开始错误达到100+,后来慢慢改改到这么多,发现还是解决不了winnt.h文件中的错误。
查阅了不少资料,发现其他人对此错误主要有以下解决方法:
1.两个类相互include(这个确实会导致这个问题,主要是因为编译时,无论先编译哪一个文件,都有一个类文件没有定义边被使用了)。
2.还有的可以通过修改项目属性-VC++目录中包含目录的顺序来解决(将$(IncludePath)文件移到最前面)
3…还有的可以通过调换include头文件的顺序解决的。
问题确定
然而,这三种方法都没能解决我的问题。
这时再看看我刚开始声明的背景,会不会我定义的宏跟windows.h中的文件有冲突?没错,确实是。
通过查看错误所在位置,我发现winnt.h文件中也有一个N,两者冲突了。
而解决方法也很简单:一种是直接将宏定义#define N 25放到#include <windows.h>下;另一种则是直接将N改成其他字母集(最好不容易重复的那种)。
最后想说一下,遇到错误不要太急躁,我一开始就是比较急躁,只知道到处查,查半天也没解决。后来自己仔细研究了一下错误所在处,静下心来想了想就解决了。
希望这篇文章能帮到大家!