C++关于转换构造函数自动调用的问题

本文探讨了C++中转换构造函数与运算符重载的问题。当类包含一个形参的构造函数时,可以隐式创建临时对象。然而,如果运算符重载使用的是引用,临时对象无法进行隐式类型转换,导致编译错误。错误信息提示未找到接受特定类型的运算符。通过修改运算符重载的参数类型,问题得以解决。同时,当转换构造函数、运算符重载和类型转换函数共存时,可能产生二义性,影响编译结果。
摘要由CSDN通过智能技术生成

声明Complex类:

class Complex

{
public:
Complex(double);
friend Complex operator+(Complex &,Complex &);
private:
double real;
double image;

};

主函数:

int main()
{

Complex c1(1.2,3.4),c2;
c2=2+c2;

return 0;
}

提示错误信息为:

 error C2678: 二进制“+”: 没有找到接受“int”类型的左操作数的运算符(或没有可接受的转换),可能是“Complex operator +(Complex &,Complex &)” 尝试匹配参数列表“(int,Complex)”时生成失败。

当把重载函数 friend Complex operator+(Complex &,Complex &) 改为 friend Complex

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值