为了账号安全,请及时绑定邮箱和手机立即绑定

C++c重载出错

C++c重载出错

梵蒂冈之花 2019-04-23 15:18:36
我写了个Book的类一开始如下:classBook{public:Book(stringname,stringauthor,stringpub,stringisbn,intremain,intborrowed):_bookName(name),_bookAuthor(author),_bookPub(pub),_bookISBN(isbn),_bookRemain(remain),_bookBorrowed(borrowed){}//...中间省略}ofstream&operator
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

是编译器自动转换在作怪。operator<<的第二个参数可以是string,你写了一个constructor可以把string转换成Book,同时Book也可以作为operator<<的第二个参数(即你写的那个函数),所以编译器不知道是直接调用string的那个版本,还是把string转换成Book然后调用book的版本。建议把Book(stringisbn)改成explicitBook(stringisbn)关闭自动转换
                            
查看完整回答
反对 回复 2019-04-23
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

这是单参数构造函数带来的隐式转换问题,详细可以参考scottmayer的《MoreeffectiveC++》
有两种函数允许编译器进行这些的转换:单参数构造函数(single-argumentconstructors)和隐式类型转换运算符。解决方法是提供一个默认构造函数或者加上explicit关键字.
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 430 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号