c++ - 返回二维数组的函数声明中的 3 个错误
问题描述
这段代码
int[][] settile(int[][] field, int x, int y, bool player);
在头文件中给出以下错误:
expected an identifier
一开始[]
,
an array may not have elements of this type
在第二个[]
和
expected a ';'
在settile
. 错误在哪里,我该如何解决?
解决方案
简而言之:您不能以这些方式返回和传递二维数组。使用向量(或评论中建议的@foreknownas_463035818 的向量数组)。
数组是内存的线性部分。[]
运算符通过某个偏移量在内存中取值。所以它等于arr[i] == *(arr + i)
。对于 2D 数组,编译器需要知道除一维之外的所有维度,因此 compile 可以像这样使用它arr[i][j] == *(arr + i * N + j)
:当您在函数中传递数组时,您必须指定除一个(或您想要的所有)维度之外的所有维度的大小。IEvoid f(int a[][5]);
关于返回二维数组。C++ 中的数组不是一种类型,它是一种特殊的声明形式。所以回归int[][]
是没有意义的。您必须使用某种包装器(例如std::array
of std::vector
),它将复制所有数据。
推荐阅读
- javascript - 在 Angular 5 选项字段中处理布尔过滤器?
- ruby - 在 Gemfile 中获取 gem 的自定义方法
- mongodb - 如何在Mongo中独立地按日期和时间过滤?
- json - 为什么我的调度程序 servlet 中不需要 http2MessageConverter
- javascript - 授权后更新标头 authLink react-apollo
- c# - 文件上传错误 - 服务器响应错误:“未知服务器错误”
- sparql - 使用 FILTER 和 LIMIT 运行 SPARQL 查询时出错
- angular - webpack 和 SystemJsNgModuleLoader 同时 Angular 5
- c# - 将日期从 html 表单提交到控制器
- java - 从 RestTemplate 将 JSON 反序列化为枚举