C++学习笔记

 variable or field 'xxx' declared void与call of overloaded 'xxx(type&, type&)' is ambiguous的探讨

 variable or field 'xxx' declared void:

当我们编译一个如:void cube(type &a) 的函数时,可能会出现variable or field 'cube' declared void的报错,产生编译器报错的原因是:编译器将函数'cube'当做了一个变量,当编译器试图编译这个变量时,发现并没有void这样的类型,所以编译发生错误。那么,为什么编译器会将原本是函数的cube当成变量处理呢?
一个可能的原因是我们在函数定义之前,并没有定义type这样的类,如string这样一个类型,如果在头文件中没有加入<string>那么,string并没有被定义,这会导致调用string的函数名被编译器当做一个变量来处理。正确的处理办法是在函数定义前,将函数将用到的变量类型定义一遍(加入包含该类型的头文件)。
call of overloaded 'xxx(type&,type&)' is ambiguous:
当我们在定义函数时,函数名的选用可能会出现错误。如swap(int &a,int &b)这是一个交换两个实数引用的函数。当我们将函数完善并编译时,就会出现 call of overloaded 'swap(int&, int&)' is ambiguous的报错。这是函数重载出现了二义性,即函数特征标发生了重复。
那么,为什么会出现这样的报错呢?这是因为我们定义的函数名 swap函数与标准库的std::swap函数冲突,属于调用疏忽。处理方法有两种,一是调用时声明函数名称空间将swap(int &a,int &b)改为::swap(int &a,int &b),在前面加上::;另一种方法是修改函数名称,避免与库中的函数冲突。
 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值