太多初始值设定项加上返回数组的函数的错误

时间:2015-03-15 03:24:18

标签: c++

嘿所以我希望这个函数返回一个包含1行和3列的数组,不用担心需要格式化。我得到的初始化错误太多了。其他评论也将不胜感激。该程序试图找到2个粒子之间的位移。这是我的代码中实现的功能。

double displacement(double x1, double x2, double y1, double y2, double z1, double z2){
double ddx, ddy, ddz, ddxf, ddyf, ddzf;
double disp[1][3] = { { 0.0 }, { 0.0 }, { 0.0 } };
ddx = x1 - x2; ddy = y1 - y2; ddz = z1 - z2;
if (ddx > L / 2){
    ddxf = ddx - L;
}
else if (ddx < -L / 2){
    ddxf = ddx + L;
}
else { ddxf = ddx; }

if (ddy > L / 2){
    ddyf = ddy - L;
}
else if (ddy < -L / 2){
    ddyf = ddy + L;
}
else { ddyf = ddy; }


if (ddz > L / 2){
    ddzf = ddz - L;
}
else if (ddz < -L / 2){
    ddzf = ddz + L;
}
else { ddzf = ddz; }

return disp[1][3] = { ddxf }, { ddyf }, { ddzf } };
}

3 个答案:

答案 0 :(得分:0)

更改

double disp[1][3] = { { 0.0 }, { 0.0 }, { 0.0 } };

double disp[1][3] = { { 0.0 , 0.0, 0.0 } };

第一个适合disp[3][1]

答案 1 :(得分:0)

您无法按值返回函数中的数组。但是,您可以通过指针传递数组并在那里填写值:

#include <iostream>

double *displacement(double x1, double x2, double y1, double y2, double z1, double z2, double ret[3])
{
  ...

  ret[0] = ddxf;
  ret[1] = ddyf;
  ret[2] = ddzf;

  return ret;
}

int main(void)
{
  double ans[3];

  displacement(1.0, 2.0, -1.0, 1.0, 3.0, -1.0, ans);

  std::cout << "The answer is: " << ans[0] << " " << ans[1] << " " << ans[2] << std::endl;

  return 0;
}

答案 2 :(得分:0)

您无法从函数返回数组。通常,您可以返回指向数组第一个元素的指针。

return disp[1][3] = { ddxf }, { ddyf }, { ddzf } };

上面没有返回指向disp的第一个元素的指针。以下将返回一个指针:

return disp;

return &(disp[0]);