0

以下程序完美构建。但是,在执行过程中,无论degree我提供什么值,程序都只接受2个数组元素作为输入。我想重新声明数组f[]fDash[]. 在 JAVA 中,可以使用new关键字轻松地重新声明数组。在c ++中也可以吗?如果没有,有什么替代方案?PS 我使用的是 CodeBlocks 13.12,编译器设置是标准的。

#include <iostream>
#include <cmath>
using namespace std;
class Polynomial
{
    public:
        void input(void);
        void expression(void);
        void derivative(void);
        double value(double var);
        double der(double var);

    private:
        int f[];
        int fDash[];
        int degree;
};

void Polynomial::input()
{
   cout<<"Enter degree of polynomial:\t";
   cin>>degree;
   f[degree+1];
   fDash[degree];
   for(int i=0;i<=degree;i++)
   {
       cout<<"Enter coefficient of x^"<<i<<":\t";
       cin>>f[i];
   }
   for(int i=0;i<degree;i++)
   {
       fDash[i]=f[i+1]*(i+1);
   }
}
void Polynomial::expression()
{
    cout<<f[0];
    for(int i=1;i<=degree;i++)
    {
        cout<<" + "<<f[i]<<"*x^"<<i;
    }
}
void Polynomial::derivative()
{
    cout<<fDash[0];
    for(int i=1;i<degree;i++)
    {
        cout<<" + "<<fDash[i]<<"*x^"<<i;
    }
}
double Polynomial::value(double var)
{
    double val=0.0;
    for(int i=0;i<=degree;i++)
    {
        val+=f[i]*pow(var,i);
    }
    return val;
}
double Polynomial::der(double var)
{
    double val=0.0;
    for(int i=0;i<degree;i++)
    {
        val+=fDash[i]*pow(var,i);
    }
    return val;
}
int main()
{
   double lb,ub,step,var,accum=0.0,rms;
   int counter=0;

   Polynomial p;
   p.input();
   cout<<"\n\n\nPolynomial is:\nf(x) = ";
   p.expression();
   cout<<"\n\n\nDerivative is:\nf'(x) = ";
   p.derivative();
   cout<<"\n\n\nEnter x0,x1,Step:\t";
   cin>>lb;
   cin>>ub;
   cin>>step;
   cout<<"\n\n\n====================================";
   cout<<"\n\nx\t|\tf\t|\tf'\n\n\n";

   var=lb;
   while(var<=ub)
   {
        cout<<var<<"\t|\t"<<p.value(var)<<"\t|\t"<<p.der(var)<<"\n";
        accum+=pow(p.value(var),2.0);
        var+=step;
        counter++;
   }
   cout<<"\n====================================";

   accum/=counter;
   rms=sqrt(accum);
   cout<<"\nRMS energy of f(x) = "<<rms;
   return 0;
}
4

2 回答 2

2

这不会在 clang 上编译,它会失败并显示“错误:字段的类型不完整 'int []' int f[];” fDash 也是如此。

让我们看看您是如何声明这些字段的:

int f[];
int fDash[];

在 C++ 中,您可以声明具有静态定义大小的数组,如下所示:

int f[5];
int fDash[6];

如果您想要在这种情况下需要的动态数组,则必须声明

int* f;
int* fDash;

并为他们分配内存

f = new int[5];

您还必须像这样在某处释放该内存

delete [] f;

但要注意——像这样管理自己的内存很容易出错,应该避免。您应该只使用std::vector,这相当于java.util.ArrayList

std::vector<int> f;
std::vector<int> fDash;

并像这样修改你的input函数:

void Polynomial::input()
{
    cout<<"Enter degree of polynomial:\t";
    cin>>degree;

    int input;

    for(int i=0;i<=degree;i++)
    {
        cout<<"Enter coefficient of x^"<<i<<":\t";
        cin>>input;
        f.push_back(input);
    }
    for(int i=0;i<degree;i++)
    {
        fDash.push_back(f[i+1]*(i+1));
    }
}
于 2015-03-05T11:10:24.603 回答
-1

您没有正确使用数组。如果要使用可变长度数组,则需要分配内存。如何在 c++ 中使用数组查看 thisthis,或使用std::vector

于 2015-03-05T11:06:39.180 回答