double add_physics_vector(vector<double> v1, vector<double> v2)
{
double horizontal_1 = v1[1] * cos(v1[0]);
double vertical_1 = v1[1] * sin(v1[0]);
double horizontal_2 = v2[1] * cos(v2[0]);
double vertical_2 = v2[1] * sin(v2[0]);
double horizontal_total = horizontal_1 + horizontal_2;
double vertical_total = vertical_1 + vertical_2;
double final_magnitude = sqrt(pow(horizontal_total, 2) + pow(vertical_total, 2));
double final_direction = atan2(vertical_total, horizontal_total);
double final_set[2] = {final_direction, final_magnitude};
return final_set;
}
当我尝试在final_set
函数中返回main()
时,编译器(g ++ - 4.7)给出了这个错误:
error: cannot convert ‘double*’ to ‘double’ in return
warning: control reaches end of non-void function [-Wreturn-type]
答案 0 :(得分:3)
你正在返回一个数组(它正在衰减成一个指针),但是你说你要返回一个double
。改为使用向量:
vector<double> final_set = {final_direction, final_magnitude};
return final_set;
然后您的函数将被声明为:
vector<double> add_physics_vector(vector<double> v1, vector<double> v2);
如果您想避免动态内存分配,只需返回pair<double, double>
:
pair<double, double> add_physics_vector(vector<double> v1, vector<double> v2)
{
// ...as before
return make_pair(final_direction, final_magitude);
}
答案 1 :(得分:0)
您声明该函数的返回类型是double,而不是double *
,所以当然这就是您收到错误消息的原因。
我建议使用malloc
创建一个新的双精度数组,然后将其返回:
double * make_array()
{
double * array = malloc(sizeof(double) * 2);
if (array == NULL) { /* .. error handling */ }
return array;
}
或者,由于你只是返回两个双打,你可以创建一个类或结构来保存双打,并直接返回它们。然后,您无需处理malloc
和free
。这样做的好处是它可以使您的代码更清晰,因为它会强制您为这两个双精度赋予名称。
struct Vector
{
double direction;
double magnitude;
}
Vector make_vector()
{
vector = (Vector){ 1, 2 };
return vector;
}
或者,您可以使用C ++标准库中的std::array
。