我的基本C ++代码的错误含义

时间:2014-09-04 15:04:35

标签: c++

好的,所以我写了这个程序,我不是编程专家,但我不明白我收到的错误。 在这个程序中我想包括构造函数,递归算法,重载和计算阶乘或指数......:

#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

4 个答案:

答案 0 :(得分:2)

第一个非常明显,因为您不能将floatexpfact相乘。 我相信你的意思是&#34; factorial&#34;而不是&#34; expfact&#34;。

第二个说*n是无意义的,你不能将一元*应用于float
我不确定你的意思,所以不知道你应该怎么做。

第三个是因为你有两个名为&#34; l&#34;的变量,它们都在自己的范围内 - 一个在if中,一个在else中。 这些都不属于各自分支机构的范围。

expfact(e - 1);
expfact(n * n);

创建立即扔掉的匿名对象 目前还不清楚你对这些线路的期望是什么。

您还忘记返回factorialexpfact的值。

答案 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()不返回任何内容。