导致的C++中的动态嵌套数组无法将包含大括号的初始值设定项列表转换为int



我写了一个函数,它采用动态长度数组,但内部数组大小固定,函数中的第二个参数是父数组的长度。然而,当我尝试访问嵌套值时,我会遇到上面提到的问题。

void myFunc(int arrOfArr, int arrOfArrLen) {
// try to access
arrOfArr[0][1]; // expect val2
}

示例用法

myFunc(
{
{val1, val2},
{val3, val4}
},
2
);

编辑:我意识到";上下文地";很明显,整数没有索引,但这就是声明数组的方式。。。(在Arduino上下文中说实话(但显然它仍然是C++

这是谷歌返回的第一个沙盒中的可运行演示

http://cpp.sh/5sp3o

更新

我确实找到了一个解决方案,它很丑陋,但它有效:

而不是传入一个";生的";嵌套数组作为参数,我首先将其设置为变量例如:

int arrOfArr[][3] = {
{val1, val2},
{val3, val4}
}

然后在功能中我做同样的事情

void myFunc(int arrOfArr[][3], int arrOfLen) {
// access
}

称之为

myFunc(arrOfArr, 2);

正如我所说,这很丑陋,但对我来说很有效,这是一个路过的项目,而不是一个低级的开发,也许以后会完全学会,但在日常工作中不需要。

edit:很明显,我最初试图做的事情,例如嵌入一个初始值设定项列表作为参数是行不通的。

如果您想传递嵌套数组,声明可能是:

template<size_t N>
void myFunc(int const arrOfArr[][N], int arrOfArrLen) {
// ...
}

如果已经决定了N,则可以删除模板参数。

const size_t N = 3;
void myFunc(int const arrOfArr[][N], int arrOfArrLen) {
// ...
}

但是如果您传递一个包含大括号的初始值设定项,它就不起作用了,您可以添加一个重载函数:

template<size_t M, size_t N>
void myFunc(int const (&arrOfArr)[M][N], int arrOfArrLen){
// attention: int *const*
// ...
}

最新更新