C++ velocity-verlet算法c++;

C++ velocity-verlet算法c++;,c++,arrays,C++,Arrays,我试图用verlet算法得到汽车下山的位置和速度。然而,我不断地 错误:“double”和“double[((sizetype)(n)+-1))+1)]类型的操作数对二进制“运算符*”无效| 为什么会这样 #include <iostream> #include <cmath> #include <fstream> #include <iomanip> int n=100; int m=100; double const gx=0; double

我试图用verlet算法得到汽车下山的位置和速度。然而,我不断地

错误:“double”和“double[((sizetype)(n)+-1))+1)]类型的操作数对二进制“运算符*”无效|

为什么会这样

#include <iostream>
#include <cmath>
#include <fstream>
#include <iomanip>

int n=100;
int m=100;
double const gx=0;
double const gy=-9.8;

using namespace std;

int main()
{

    int i;
    double t[n], x[n], y[n], r[n], vx[n], vy[n], gx[n], gy[n];
    double h = 2.0/(n-1), h2=h*h/2, r2, r3;
    //double t[0]=0,x[0]=0,y[0]=20;
    //double r[0]=x[0],vx[0]=0,vy[0]=0;
    double ke[n], mass=1500;
    t[0]=0;
    x[0]=0;
    y[0]=20;
    r[0]=x[0];
    vx[0]=0;
    vy[0]=0;
    ke[0]=0;

    for(i=0; i<n-1; i++){
        t1=t[0]+h;
        x[i+1]=x[i]+h*vx[i]+h2*gx;
        y[i+1]=y[i]+h*vy[i]+h2*gy;
        r2=x[i+1]*x[i+1]+y[i+1]*y[i+1];
        r[i+1] = sqrt(r2);
        r3=r2*r[i+1];
        vx[i]=vx[i]+h*gx/2;
        vy[i]=vy[i]+h*gy/2;

        cout << t[i+1] << x[i+1] << y[i+1] << r[i+1] << vx[i] << vy[i] << endl;
    }
}
#包括
#包括
#包括
#包括
int n=100;
int m=100;
双常数gx=0;
双常数gy=-9.8;
使用名称空间std;
int main()
{
int i;
双t[n],x[n],y[n],r[n],vx[n],vy[n],gx[n],gy[n];
双h=2.0/(n-1),h2=h*h/2,r2,r3;
//双t[0]=0,x[0]=0,y[0]=20;
//双r[0]=x[0],vx[0]=0,vy[0]=0;
双ke[n],质量=1500;
t[0]=0;
x[0]=0;
y[0]=20;
r[0]=x[0];
vx[0]=0;
vy[0]=0;
ke[0]=0;
对于(i=0;i
h2
是一个
double
gx
是一个数组。很明显,你不能将一个
double
值乘以一个数组。这是一个错误,这正是编译器的错误消息所说的

这不是出现此错误的唯一一行


您可能打算在这里编写
gx[i]
gy[i] >下一行。

为什么使用原始数组而不是<代码> STD::<代码> GX是数组类型,不是<代码>双< /代码>,因此错误。非常感谢。我修复了它。实际上他有另一个定义为双的GX,所以它必须是一个错误,即C++不允许乘以数组的双倍-但是在那里我没有什么特别明显的。我完全可以想象一种语言,其中double*数组产生了一个数组。
... h2*gx;