2015-03-15 2 views
-2

эй, поэтому я хочу, чтобы эта функция возвращала массив с 1 строкой и 3 столбцами, не беспокойтесь о формате, в котором он нужен. Я получаю слишком много ошибок инициализации. Также были бы весьма признательны и другие комментарии. Эта программа пытается найти смещение между двумя частицами. Вот функция, реализованная в моем коде.ошибка для слишком большого количества инициализаций плюс функция, сохраняющая массив

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 } }; 
} 
+0

Я не совсем уверен, что вы просите. Но значение инициализатора в 'return', по-видимому, не имеет открытой скобки. Если это не касается вашего вопроса, ознакомьтесь с http://stackoverflow.com/help/how-to-ask за советом о том, как представить ясный ответный вопрос. –

ответ

0

Изменить

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

в

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

Первый из них будет соответствовать disp[3][1].

+0

спасибо, что я до сих пор новичок в этом, поэтому я не понимаю, что это такое, это также подразумевает, что я должен изменить return disp [1] [3] = {{ddxf}, {ddyf}, {ddzf}} ; to disp [1] [3] = {{ddxf, ddyf, ddzf}} – ASS466uiuc

+0

@ ASS466uiuc, вы не можете этого сделать, поскольку возвращаемый тип функции является 'double', а не массивом. –

+0

damnit ok, спасибо – ASS466uiuc

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; 
} 
0

Вы не можете вернуть массив из функции. Обычно вы можете вернуть указатель на первый элемент массива.

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

Вышеупомянутый не возвращает указатель на первый элемент disp. Ниже будет возвращать указатель однако:

return disp; 

или

return &(disp[0]); 
Смежные вопросы