Как перегрузить функцию, которая вызывает перегруженную версию самой себя? - PullRequest
3 голосов
/ 21 февраля 2012
    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 внутри Fraction::pow, он принимает float, int в качестве входа и должен выдавать float, но вместо этого он принимает Fraction в качестве ввода и выдает ошибку.

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Вы можете попробовать вызвать функцию глобальной области действия 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);
0 голосов
/ 21 февраля 2012

Согласно http://www.cplusplus.com/reference/clibrary/cmath/pow/ ни один перегруженный метод не принимает число с плавающей точкой и целое число, единственный, принимающий число с плавающей точкой в ​​качестве первого аргумента, также принимает число с плавающей точкой в ​​качестве второго аргумента.

float pow (float base, float exponent);

Есть ли в вашем классе Fraction другая перегруженная версия pow?

...