[英]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.