You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++通过指针访问二维string数组报operator+无匹配错误如何解决?

错误原因
  • 你声明的形参b类型为string*,是指向单个std::string对象的指针,而非指向二维数组行的指针。教材中*(*(arr + r) + c)的访问语法,要求arr的类型是指向数组的指针(此处对应应为string (*)[10],即指向长度为10的string数组的指针),你的用法不符合类型要求。
  • 执行*(b + r)时已经得到了一个std::string实例,后续尝试对该实例执行+ c(c为int类型)操作,而std::string没有重载与int相加的+运算符,因此触发了对应的编译错误。
修正方案

方案1:调整指针类型,匹配二维数组访问语法

修改指针声明与函数形参类型,让指针类型匹配二维数组的隐式转换规则:

  1. main函数中的指针声明改为:
string board[10][10];
string (*b)[10] = board; // 二维数组名隐式转换为指向第一行的指针,类型为string (*)[10]
  1. clearBoard函数的形参改为对应类型:
void clearBoard(string (*b)[10])

修改后你原来的*(*(b + r) + c)访问写法可以正常运行。

方案2:保持string*指针类型,手动计算元素偏移

二维数组在内存中为行优先连续存储,如果你要保持传首元素指针的写法,直接通过偏移量计算元素位置即可,将出错的两行修改为:

*(b + r * 10 + c) = "-";
cout << *(b + r * 10 + c) << " ";

这种方式不需要修改函数形参与传入的指针类型,直接调整访问逻辑即可。

内容的提问来源于stack exchange,提问作者Ada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:00:00