2012-02-21 71 views
3
Fraction Fraction::pow (Fraction frac, int power) 
    { 
     Fraction temp; 
    temp.num = pow(frac.num, power); 
    temp.den = pow(frac.den, power); 

    return (temp); 
    } 
    // Assume that num and den are float and cmath is included 

期间pow需要floatint作为输入,并应给出float而是需要Fraction作为输入,并抛出一个错误的Fraction::pow,里面的实例。如何重载调用自身的重载版本的函数?

+1

您可以发布该类中所有'pow'函数的确切签名,以及所有构造函数,复制赋值运算符和转换运算符吗? – Mat 2012-02-21 07:07:40

+0

显示'pow'的第二个重载定义。 – hamstergene 2012-02-21 07:07:46

+0

正如@Mat所说的发布类和函数定义,你的'Fraction'类很可能有一个用于隐式转换的转换构造函数,导致调用不正确的函数,以确定为什么会发生这种情况,您需要向我们展示细节Mat说。 – 2012-02-21 07:13:26

回答

3

你可以尝试调用全局范围pow功能(我猜是你想要的):

temp.num = ::pow(frac.num, power); 
temp.den = ::pow(frac.den, power); 

作用域运算符(::)什么也没有在其左侧将调用全局范围。当然,因为你是包括<cmath>你应该也能够给他们打电话std命名空间:

temp.num = std::pow(frac.num, power); 
temp.den = std::pow(frac.den, power);