候选函数不可行:期望第三个参数的{值

时间:2016-02-23 20:36:40

标签: c++ pass-by-reference

使用递归函数myPowerFunction(int p,int n,int& currentCallNumber)计算P的n次幂(p和n都是正整数)。 currentCallNumber是一个引用参数,用于存储到目前为止所进行的函数调用次数。 myPowerFunction返回p。

的n次幂
int myPowerFunction(int p, int n, int &z)
{
    z++;
    if(n==1)return p;
    else if(n==0)return 1;
    else if(n%2==0)return myPowerFunction(p,n/2,z)*myPowerFunction(p,n/2,z);
    else return myPowerFunction(p,n/2,z)*myPowerFunction(p,n/2,z)*p;
}

int main()
{
    cout << myPowerFunction(3,4,1);
}

4 个答案:

答案 0 :(得分:10)

您需要一个变量作为main_program中的第三个参数传递。您不能将常量作为非const引用传递。

display:table-row

答案 1 :(得分:2)

第三个参数需要一个左值,因此你不能在那里传递数值常量,所以可能的解决方案是:

int z = 1;
cout<< myPowerFunction(3,4,z);

或者更好地创建一个调用递归函数的函数:

int myPowerFunction(int p, int n)
{
    int z = 1;
    return myPowerFunction(p,n,z);
}

答案 2 :(得分:1)

String中,文字myPowerFunction(3,4,1)无法传递给非1引用,因为它是prvalue [basic.lval]。您需要将值存储到变量中,然后在调用函数时使用该变量。

const

答案 3 :(得分:0)

您没有没有给出此处的引用作为参数。 但是可以,您对z的输入来自只读内存,因此无法修改。将z的输入视为const,在内部复制z,并提供副本作为参考。然后您所需的用法就起作用了:

int myPowerFunction(int p, int n, const int &z) // z is now const !
{
    int _z = z + 1; // copy !
    if (n == 1) return p;
    else if (n == 0) return 1;
    else if (n % 2 == 0) return myPowerFunction(p, n /2 , _z) * myPowerFunction(p, n / 2, _z);
    else return myPowerFunction(p, n / 2, _z) * myPowerFunction(p, n / 2, _z) * p;
}

int main()
{
  std::cout << myPowerFunction(3, 4, 1);
}
相关问题