禁用auto的嵌套范围for循环中找不到合适begin函数的问题
问题分析与修正
你的代码问题出在循环变量的类型声明和范围对象的选择上,具体来说:
1. 外层循环的row类型错误
*ia表示二维数组的第一行,是char[4]类型的数组。你声明char &row是引用单个char元素,这和*ia的类型不匹配——实际上你需要的是引用一个长度为4的char数组,正确声明应为char (&row)[4]。
2. 内层循环的范围对象错误
内层循环里你用了&row,这会得到指向数组的指针char (*)[4],而范围for循环无法直接遍历指针。既然row已经是数组的引用,直接用row作为范围对象即可,它本身就是可遍历的数组类型。
修正后的代码
#include <iostream> char ia[3][4] = {{'q', 'w', 'e', 'r'}, {'t', 'y', 'u', 'i'}, {'o', 'p', 'a', 's'}}; int main () { // 外层循环:引用长度为4的char数组 for (char (&row)[4] : ia) // 内层循环:直接遍历数组引用row for (char &col : row) std::cout << col << std::endl; return 0; }
额外说明
你最初写的*ia是多余的,二维数组ia本身可直接被范围for循环遍历,每次迭代拿到的就是每一行的数组(通过引用绑定到row)。如果非要用解引用的方式,也可以写成:
// 显式指定遍历整个数组范围的写法(仅作演示,不推荐) for (char (&row)[4] : *(&ia)) for (char &col : row) std::cout << col << std::endl;
不过这种写法没必要,直接用ia作为外层循环范围更直观。
内容的提问来源于stack exchange,提问作者Socks
相关产品推荐
相关产品推荐

