c++ - 无法将 '<brace-enclosed initializer list>' 转换为 'double' 作为返回

标签 c++ arduino

我正在用 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};
}

最佳答案

您的代码块都不起作用。

第一个编译但在您返回指向不再存在的数组的指针时引入未定义的行为。有关此问题的非常详细的答案,请参阅 Can a local variable's memory be accessed outside its scope?

第二个代码块编译失败 {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;
}

关于c++ - 无法将 '<brace-enclosed initializer list>' 转换为 'double' 作为返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38837859/

相关文章:

c++ - 如何让 `static_assert` 打印失败时得到的值?

c++ - 如何将 vector::push_back()` 与结构一起使用?

c++ - 如何使用旋转编码器控制HID设备?

c++ - 为 Arduino 创建库

c - Arduino 上的意外输出

connection - 通过以太网直接连接笔记本电脑和 arduino

c++ - 这是虚拟成员函数模板吗?

c++ - bool 运算符,在 C++ 中是否有快捷方式来执行此操作?

c++ - 为什么#define 没有像 arduino/c++ 中预期的那样乘以数字?

c++ - Google 测试中的 EXPECT_NO_DEATH()