当我尝试编译以下代码时,出现以下错误:
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);