C++调用类内初始化数组出现赋值及for循环报错如何解决
报错触发原因
第一处报错(obj.mas[20] = {1, 1, 1, 1, 1};)
- 同时存在逻辑和语法错误:首先
mas[20]指向的是数组下标为20的单个int元素,而你的数组长度为20,合法下标范围是0~19,这行代码本身就属于越界访问;其次你试图给单个int元素赋值一个初始化列表,类型完全不匹配,编译器自然会报无法转换为int的错误。另外要注意:C++原生数组只有在定义初始化的阶段支持用花括号列表批量赋值,定义完成后不支持直接用花括号给整个数组赋值。
第二处报错(for(int i : obj.mas[]))
- 纯语法错误:范围for循环遍历原生数组时,直接传入数组名即可,你额外加的
[]属于无效语法,编译器无法识别所以报表达式错误。
修复方案
我们可以用标准库函数实现数组批量赋值,同时修正范围for的语法即可,修复后的完整代码如下:
#include <iostream> #include <algorithm> // 用于std::fill class C{ public: int mas[20] = {}; }; int main(int argc, char** argv) { C obj; // 给mas数组前5个元素赋值为1,剩余保持默认初始化的0 std::fill(obj.mas, obj.mas + 5, 1); // 修正范围for语法 for(int i : obj.mas){ std::cout << i << "\n"; } return 0; }
如果你想要在初始化阶段就给数组赋值,也可以直接在定义对象的时候写:
C obj = {{1,1,1,1,1}};
这种写法也可以实现前5个元素为1、剩余为0的效果,不需要额外调用std::fill。
内容的提问来源于stack exchange,提问作者dbz
相关产品推荐
相关产品推荐

