如何在CLI-C++中正确访问嵌套List实现的锯齿数组元素?
在C++/CLI中正确访问
List<List<double>^>^的元素 我来帮你解决这个C++/CLI里的托管List访问问题~
问题根源
你代码最后一行报错的原因很明确:lld[0]返回的是List<double>^类型的托管句柄(指针),C++/CLI不会自动把后续的[0]转发到List对象的索引器上——编译器会误以为你想对这个托管指针做数组索引操作,这显然不是你要的效果,所以才抛出了参数不匹配的错误。
三种正确的写法
你可以任选一种方式来访问内层List的元素:
- 使用
default[]语法(C++/CLI对.NET索引器的原生支持)
List<List<double>^> ^lld = gcnew List<List<double>^>(); lld->Add(gcnew List<double>); lld[0]->Add(17.4); double d = lld[0]->default[0]; // 正确访问内层元素
- 直接访问
Item属性(.NET中List索引器的底层实现)
.NET里所有的索引器本质上都是名为Item的属性,C++/CLI可以直接调用:
double d = lld[0]->Item[0];
- 解引用托管句柄后使用
[]
把托管指针解引用成对象实例,再用普通的数组索引语法:
double d = (*lld[0])[0];
这三种写法都能正确获取到你添加的17.4,完美解决编译报错的问题。
内容的提问来源于stack exchange,提问作者Gerhard
相关产品推荐
相关产品推荐

