gpt4 book ai didi

c++ - 数组初始化问题 : Unexpected behavior

转载 作者:行者123 更新时间:2023-11-28 06:23:49 24 4
gpt4 key购买 nike

以下程序构建完美。但是,在执行过程中,无论我提供的 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;
}

最佳答案

这不会在 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));
}
}

关于c++ - 数组初始化问题 : Unexpected behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28876239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com