如何解决C ++中的动态嵌套数组导致无法将括号括起来的初始化器列表转换为int
我编写了一个函数,该函数采用动态长度数组,但内部数组大小固定,该函数中的第二个参数是父数组的长度。但是,当我尝试访问嵌套值时,遇到了上面提到的问题。
name - 50 bytes
padding - 2 bytes
tt - 4 bytes
gg - 4 bytes
------------------
total 60 bytes
------------------
用法示例
void myFunc(int arrOfArr,int arrOfArrLen) {
// try to access
arrOfArr[0][1]; // expect val2
}
编辑:我意识到“上下文上”显然是一个没有索引的整数,但这就是您声明数组的方式了……(在Arduino上下文中是正确的),但显然它仍然是C ++
这是Google返回的第一个沙箱中的上述示例的可运行演示
更新
我确实找到了一个解决方案,虽然很难看,但是可以用:
我没有将“原始”嵌套数组作为参数传递,而是将其首先设置为变量,例如:
myFunc(
{
{val1,val2},{val3,val4}
},2
);
然后在函数中我做同样的事情
int arrOfArr[][3] = {
{val1,val4}
}
命名
void myFunc(int arrOfArr[][3],int arrOfLen) {
// access
}
正如我所说的那样丑陋但对我有用,这是一个正在通过的项目,不是低级的开发人员,也许以后会完全学习它,但在日常工作中则不需要。
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*
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。