返回双精度数组时出错

时间:2014-02-25 18:18:49

标签: c++ arrays return return-type

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]

2 个答案:

答案 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;
}

或者,由于你只是返回两个双打,你可以创建一个类或结构来保存双打,并直接返回它们。然后,您无需处理mallocfree。这样做的好处是它可以使您的代码更清晰,因为它会强制您为这两个双精度赋予名称。

struct Vector
{
    double direction;
    double magnitude;
}

Vector make_vector()
{
    vector = (Vector){ 1, 2 };
    return vector;
}

或者,您可以使用C ++标准库中的std::array