繁体   English   中英

无法转换&#39; <brace-enclosed initializer list> &#39;以&#39;加倍&#39;作为回报

[英]cannot convert '<brace-enclosed initializer list>' to 'double' in return

我正在用c ++编写Arduino程序,并且有以下问题:

为什么这项工作

double* getArray() {
  double p, r, y;

  double ret[3] = {p, r, y};
  return ret;
}

但这不是

double* getArray() {
  double p, r, y;

  return {p, r, y};
}

您的代码块都不起作用。

当您返回一个不再存在的数组的指针时,第一个编译但引入了未定义的行为。 有关此问题的非常详细的答案,请参阅可以在其范围之外访问局部变量的内存吗?

第二个代码块无法编译,因为{p, r, y}不是double*的有效初始化器。

您真正需要的是std::vector<double>std::array<double, some_constant_size>std::unique_ptr<double[]> 如果您不能使用其中任何一个,则需要动态创建数组,然后需要记住的是删除该数组,例如

double* getArray() {
    double * arr = new double[3]{1,2,3};
    return arr;
}

int main() {
    double* foo = getArray();
    // use array here
    delete [] foo;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM