error: ambiguous overload for ‘operator[]‘ (operand types are ‘CXmlNode‘ and ‘int‘)

现象:

今天在练习封装xml重写 [ ] 操作符后,调用时出现error: ambiguous overload for ‘operator[]’ (operand types are ‘CXmlNode’ and ‘int’)。

函数原型:

class CXmlNode
{
	...
	CXmlNode& operator[](const char* nodename)
	{
		....
	}
	CXmlNode& operator[](uint32_t idx)
	{
		...
	}
	...
}

main.cpp:
xmlReader["system"]["logs"][0].Name();

原因:

查资料解释说是在调用时,参数有string 和 int 识别不出来。
个人测试总结原因为:传递的参数为number时,默认被识别为int,不会自动转换为无符号整型等,所以导致报错。

解决:

网上提供的解决办法是在调用的时候参数为int时在后面加u。这个方法可以解决,但是每次调用都要去注意这个感觉不方便,而且如果形参类型如果为long、unsigned long、 unsigned long long 则应该对应加 l、ul、ull。例如:

//举个栗子
CXmlNode& operator[](unsigned int idx);
xmlReader["system"]["logs"][0u].Name();

CXmlNode& operator[](long idx);
xmlReader["system"]["logs"][0l].Name();

CXmlNode& operator[](unsigned long idx);
xmlReader["system"]["logs"][0ul].Name();

个人解决方案:因为我的使用场景不会有超过int最大值(2147483647)的情况,所以直接将形参改为整型:

CXmlNode& operator[](int idx);

问题记录只为自己少踩几个坑,以及给遇到同样问题的提供一个思路,如有不对请大佬评论指出,以便及时更正不误导他人。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值