以下程序完美构建。但是,在执行期间,无论我提供的degree
值是多少,程序只需要2个数组元素作为输入。我想重新声明数组f[]
和fDash[]
可能存在问题。在JAVA中,可以使用new
关键字轻松重新声明数组。这在c ++中也可能吗?如果没有,有什么替代方案?
附:我正在使用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;
}
答案 0 :(得分:2)
这不会在clang上编译,它会失败并显示“error:field has incomplete type'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));
}
}
答案 1 :(得分:-1)
您没有正确使用数组。如果要使用可变长度数组,则需要分配内存。如何在c ++ see this和this中使用数组,或使用std::vector