我正在尝试初始化动态数组并将其传递给函数,但每次这样做都会不断出错。
float addLayer(float layers[]){
float addColor = 0;
if (std::find(std::begin(layers), std::end(layers), addColor)){
// run code
addColor = ...;
}
return addColor
}
float layers[] = {0};
newColor = addLayer(layers[]); //line 2
我收到的错误:
Expected identifier or '(' on line 2
任何帮助将不胜感激,谢谢
答案 0 :(得分:2)
float addLayer(float layers[]);
等同于
float addLayer(float* layers);
i。 e。您所拥有的只是指针。数组衰减到指针后,所有长度信息都会丢失。
要保留长度信息,可以在单独的参数中传递它,或者,可以将引用传递给数组:
template <size_t N>
float addLayer(float(&layers)[N]); // pass reference to array of length N
此外,还有语法错误:
newColor = addLayer(layers[]);
// ^^
图层已经已经是一个数组(但是如果传递给函数的指针版本,则会衰减到指针),而您在上一行中实际执行的操作是将index运算符应用于数组-但是没有参数(请注意,使用参数,您将获得浮点值,而不再是指针。)
最后:std::array
(固定大小)和std::vector
(可变大小)都是原始数组的更好替代方案,请尽可能使用其中之一。
答案 1 :(得分:1)
问题是您不能将C数组作为参数传递给函数-C不允许这样做,因此C ++也不允许。如果声明函数以C数组作为参数,则编译器会静默地将其更改为指针,因此实际上是在传递指针。因此,在该指针参数上调用std :: begin和std :: end将不起作用。
为了在C ++中实现此功能,您需要改用std::array
或std::vector
。