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