C++中引用文件报错:eg.winnt.h文件报“语法错误‘常数’”,“链接规范必须在全局范围内”,“意外的标记位于‘;’之前”

刚刚写C++程序时遇到了一个令人头疼的错误,搞了半天才解决,在这里分享给大家,如有相似情况可以试一下可不可以解决。

背景:

1.我写的程序中,有个文件有生成随机数这一过程,为了保证每次运行生成的随机数不同,我在这里引入windows.h头文件,然后获取系统时间的毫秒数值作为种子。
2.我在文件中还宏定义了一个常数N(如下图所示)。

问题:

运行后所报错误如下图所示,一开始错误达到100+,后来慢慢改改到这么多,发现还是解决不了winnt.h文件中的错误。
winnt.h所报错误
查阅了不少资料,发现其他人对此错误主要有以下解决方法:
1.两个类相互include(这个确实会导致这个问题,主要是因为编译时,无论先编译哪一个文件,都有一个类文件没有定义边被使用了)。
2.还有的可以通过修改项目属性-VC++目录中包含目录的顺序来解决(将$(IncludePath)文件移到最前面)
3…还有的可以通过调换include头文件的顺序解决的。

问题确定

然而,这三种方法都没能解决我的问题。
这时再看看我刚开始声明的背景,会不会我定义的宏跟windows.h中的文件有冲突?没错,确实是。
通过查看错误所在位置,我发现winnt.h文件中也有一个N,两者冲突了。
**宏定义与windows.h文件中的冲突**
而解决方法也很简单:一种是直接将宏定义#define N 25放到#include <windows.h>下;另一种则是直接将N改成其他字母集(最好不容易重复的那种)。

最后想说一下,遇到错误不要太急躁,我一开始就是比较急躁,只知道到处查,查半天也没解决。后来自己仔细研究了一下错误所在处,静下心来想了想就解决了。

希望这篇文章能帮到大家!

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值