好的,所以我写了这个程序,我不是编程专家,但我不明白我收到的错误。 在这个程序中我想包括构造函数,递归算法,重载和计算阶乘或指数......:
#include <iostream.h>
using namespace std;
class expfact {
public:
float f, n;
int e;
expfact(float a) {
cout << "Base Constructor" << endl;
n = a;
}
expfact(float a, int b) {
cout << "Exponent Constructor" << endl;
e = b, n = a;
}
float factorial() {
if (n == 0 || n == 1)
return 1.0;
else
f = n * expfact(n - 1);
}
float exponent() {
if (e == 0)
return f;
else {
f = *n;
expfact(e - 1);
expfact(n * n);
}
}
};
int main() {
float j;
int k;
cout << "Enter base for factorial and/or exponent" << endl;
cin >> j >> k;
if (k != 0) {
expfact l(j, k);
cout << l.exponent();
} else
expfact l(j);
cout << l.factorial();
return 1;
}
错误和警告:
In member function 'float expfact::factorial()':
[Error] no match for 'operator*' (operand types are 'float' and 'expfact')
In member function 'float expfact::exponent()':
[Error] invalid type argument of unary '*' (have 'float')
In function 'int main()':
[Error] 'l' was not declared in this scope
答案 0 :(得分:2)
第一个非常明显,因为您不能将float
与expfact
相乘。
我相信你的意思是&#34; factorial&#34;而不是&#34; expfact&#34;。
第二个说*n
是无意义的,你不能将一元*
应用于float
。
我不确定你的意思,所以不知道你应该怎么做。
第三个是因为你有两个名为&#34; l&#34;的变量,它们都在自己的范围内 - 一个在if
中,一个在else
中。
这些都不属于各自分支机构的范围。
行
expfact(e - 1);
expfact(n * n);
创建立即扔掉的匿名对象 目前还不清楚你对这些线路的期望是什么。
您还忘记返回factorial
和expfact
的值。
答案 1 :(得分:1)
你在滥用课程。在这种情况下,完全不需要面向对象的编程。实际上,如果您不尝试将代码强制转换为基于类的结构,则代码将变得更简单,更易于使用。
您的所有代码都可以简化为2个功能:
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
int exponent(int a, int b) {
if (b == 0)
return 1;
else
return a * exponent(a, b-1);
}
int main() {
int j, k;
cout << "Enter base for factorial and/or exponent" << endl;
cin >> j >> k;
if (k != 0)
cout << "j^k = " << exponent(j, k) << endl;
else
cout << "j! = " << factorial(j) << endl;
return 0;
}
此外,正如您在我的代码中所注意到的那样,main
应该在{$ 1}}上返回良好的运行状态。
答案 2 :(得分:0)
第一个错误:
您应该为您的班级实施operator *或选择您想要使用的参数。
第二次错误:
float exponent()
中的您的意思是f *= n;
而不是f = *n;
吗?
第3次错误:
在main中:您不能在块中声明变量并在外部使用它。 一个可能的解决办法:
expfact *p;
if (k != 0) {
p = new expfact(j, k);
cout << p->exponent();
} else
p = new expfact(j);
cout << p->factorial();
//....
//and after done:
delete p;
答案 3 :(得分:0)
您的类需要一个返回浮点数的运算符。如下所示:
operator float() {
return f;
}
该行
f = *n;
是非法间接的。我不确定你在那里做了什么,所以我不确定你应该如何修复它,但是如果你移除了*
字符,它会指定n
&#39; s值为f
,至少是有效的。
在main的底部,您调用l.factorial
,其中没有定义变量l
。我想你想把这一行分组为上面的else语句的一部分。
您还有exponent()
和factorial()
不返回任何内容。