簡體   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