【问题标题】:Error returning an array of doubles返回双精度数组时出错
【发布时间】:2014-02-25 18:18:48
【问题描述】:
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;
} 

当我尝试在我的 main() 函数中返回 final_set 时,编译器 (g++-4.7) 给了我这个错误:

error: cannot convert ‘double*’ to ‘double’ in return
warning: control reaches end of non-void function [-Wreturn-type]

【问题讨论】:

  • 你不能返回一个数组。使用向量,或std::array
  • @BrianBi 不知道!向量不是一种数组吗?你知道这两者的结构具体是什么让它们在返回语句中有所不同吗?
  • 不,向量有点像数组,但不是真的。它实际上是一个类。

标签: c++ arrays return return-type


【解决方案1】:

你正在返回一个数组(它正在衰减为一个指针),但你说你会返回一个double。改用向量:

vector<double> final_set = {final_direction, final_magnitude};
return final_set;

然后您的函数将被声明为:

vector<double> add_physics_vector(vector<double> v1, vector<double> v2);

如果你想避免动态内存分配,只需返回一个pair&lt;double, double&gt;

pair<double, double> add_physics_vector(vector<double> v1, vector<double> v2)
{
    // ...as before
    return make_pair(final_direction, final_magitude);
}

【讨论】:

    【解决方案2】:

    您声明该函数的返回类型是双精度,而不是 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2013-01-11
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多