我试图初始化一个动态数组并将其传递给一个函数,但每次这样做都会出错。
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
任何帮助都将不胜感激,谢谢
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[]);
// ^^
Layers已经是一个数组了(但如果传递给函数的指针版本,它会衰减为指针(,而您在上面一行中实际做的是将索引运算符应用于数组,但没有参数(请注意,有了参数,您会得到一个浮点值,而不是指针(。
最后:std::array
(固定大小(和std::vector
(可变大小(都是原始数组的更好替代方案,尽可能使用其中之一。
问题是不能将C数组作为参数传递给函数——C不允许这样做,所以C++也不允许。如果您将一个函数声明为将C数组作为参数,编译器会自动将其更改为指针,因此您实际上是在传递指针。因此,对该指针参数调用std::begin和std::end将不起作用。
为了在C++中实现这一点,您需要使用std::array
或std::vector
。