c++ complier errors:passed arguments, but takes just

本文分享了一次解决Linux环境下C++项目中宏定义错误的经历,详细介绍了如何定位并修复宏定义参数数量不匹配的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在Linux环境下编译一个C++项目,遇到了一个很奇怪的错误“:passed arguments, but takes just”,之前也从来没有遇到过这种error,google了一下,综合了一下原因,“宏定义冲突”,因为这个项目里面参加AWS的做法,将所有的宏函数放到了同一个头文件里面,然后不同的头文件又不断的include,于是检查各级的头文件,但是没有发现错误;看了一下stack overflow的解决办法一共就两种。

1、#undef

  使用这个方法的前提是,假定确实因为宏定义冲突导致的这个错误,但是我基本将所有的相关头文件都检查了一遍,都没有发现宏被redefine。具体的办法就是在宏定义的末尾加上#undef 宏名字

2、在宏调用的时候将宏的名字用()括起来

举个例子,

(MIN) (1,2)
//1,2为参数

这两种方法使用都可以解决编译出现的错误,但是找了很久始终没有发现哪里的宏被定义冲突;最后我又重新检查了那个包含所有宏定义的头文件,发现里面的一个宏调用错误,就是在宏定义的时候是3个参数,但是调用的时候却只穿进去2个参数,导致这个错误;改正了后重新make,编译通过!

总结:在Google这个errors的时候,我尝试使用前两个办法解决问题;但是其实我并没有从根本上去解决这个问题,因为我并没有发现哪里的宏被重复定义了;很感谢mentor让我去找真正的错误出在那,而不是去为了解决问题而去解决问题,如果当时那样做了,很明显那个项目在使用的时候肯定是会出现bug的,那个时候将更难发现errors在哪。很感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值