通过C++中的函数传递Unsize数组



我试图初始化一个动态数组并将其传递给一个函数,但每次这样做都会出错。

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::arraystd::vector

相关内容

  • 没有找到相关文章

最新更新