如何直接写入std::vector<std::array>容器,解决MSVC编译不通过问题
问题根源
你的代码语法不符合C标准规范,GCC对错误写法做了非标准扩展兼容,MSVC严格执行C标准所以编译失败。
你定义的容器层级为:std::shared_ptr指向std::vector,vector的每个元素是长度为9的std::array<std::string>,原写法中operator[0]的调用格式、索引顺序均不符合标准要求。
修复方案
写法1:简洁解引用写法(推荐)
// 注意容器下标从0开始,确认循环边界小于vector初始化的size,避免越界 for (int j = 0; j < size; j++) { // (*tablelisttt)取到vector对象,[j]取vector第j个array元素,[0]取array第0位字符串 (*tablelisttt)[j][0] = "Hello"; }
写法2:显式调用operator[]的标准写法
如果有特殊场景需要显式调用运算符函数,使用标准格式:
for (int j = 0; j < size; j++) { tablelisttt->operator[](j)[0] = "Hello"; }
注意事项
- 不存在正式发布的C19标准,当前最新正式标准为C23,你提到的C++19应为非正式草案版本,不影响基础语法的兼容性要求
- 原循环从j=1开始、终止条件为
j<=max的写法容易触发越界访问,vector初始化的size必须大于循环用到的最大下标,否则会触发未定义行为
内容的提问来源于stack exchange,提问作者Jens
相关产品推荐
相关产品推荐

