当我尝试编译以下代码时,出现以下错误:


  homework3_test.cpp:111:25:错误:呼叫“(PowerN)(int&)”不匹配
    power_three(test_power2);


PowerN是一类。

class PowerN{
    public:
    static int i;
    PowerN(int a);
};


power_three定义为


  PowerN power_three(3);


这个很好,而“ 3”是一个整数。但是对于以下三个整数变量:


  int test_power1,test_power2,test_power3;


它返回错误。那么为什么它们不同呢? int test_power1没有值,因此成为int&的原因吗?我该如何解决?

以下是PowerN的代码

PowerN::PowerN(int a){

    int b=0;
    if (i>0){
        a = pow(b,(i-1));
    }
    else {
        b=a;
    }
    i= i+1;
}


更新:
PowerN需要更改它占用的第二,第三,第四整数的值,以下是要求:

PowerN的构造函数采用单个整数N。每次调用PowerN实例的函数运算符时,它将其参数值更改为N ** x,其中x是函数运算符被调用的次数。例如:

int x;

PowerN power_three(3);

power_three(x);//x will now be 1

power_three(x);//x will now be 3

power_three(x);//x will now be 9


产生错误的代码是:

homework3_test.cpp:111:25:错误:呼叫“(PowerN)(int&)”不匹配

power_three(test_power2);

最佳答案

该问题出现在更新的代码中:

int x;
PowerN power_three(3);
power_three(x);//x will now be 1


最后一行尝试调用PowerN::operator()。但是,您没有定义operator()。该错误消息有点含糊,但是它说它查找了PowerN::operator()(int &)却没有找到它。

我不知道您在想什么会导致“ x现在为1”。似乎您似乎在尝试再次对已存在的对象调用构造函数。那是不合法的;即使是这样,语法也会有所不同。

也许您应该将构造函数中当前的某些代码移到成员函数中(例如calculate(int &)),然后执行以下操作:

PowerN power_three(3);
power_three.calculate(x);

10-06 12:44