【发布时间】:2013-12-11 13:33:20
【问题描述】:
我已经创建了这个类 BigInt,它派生了转换构造函数,例如
BigInt::BigInt(int l):InfInt(l){}
然而当我做这样的事情时:
for(i=0;BigInt::pow(2,i+1)<exponent;i++);
编译器对我大喊:
error: ambiguous overload for ‘operator+’ (operand types are ‘BigInt’ and ‘int’)
我知道解决此问题的一种简单方法是在所有内容前面添加 (BigInt),如下所示:
for(i=0;BigInt::pow(2,i+(BigInt)1)<exponent;i++);
但是这段代码看起来很难看,有点难读,而且打字很痛苦。有没有办法告诉编译器立即执行此操作(如标题所述)?如果没有的话,也不会太戏剧化。
哦,如果已经问过这个问题,请原谅,但我试图在谷歌和这里自己寻找解决方案,但没有找到任何可以帮助我的解决方案。 (我主要能找到关于operator int() 之类的东西,我已经知道了)。
【问题讨论】:
-
为什么不提供一个以
int为参数的operator+的重载? -
或采用
int的构造函数。 -
@Nim 因为我必须对每种类型都这样做,我想知道是否有更聪明的方法。
-
不,你不需要,你可以将
int添加到BigInt,我原以为会是这样......你还想添加什么?如果是这样,您可以添加选择性支持.. -
@BoBTFish 我有一个,我在帖子的第一行中提到了它。还是您在谈论不同类型的构造函数?