c++ - 如何将二维数组(矩阵)传递给函数?
问题描述
这回到了基础,但出于某种原因,Visual Studio 不断给我一个错误。我的函数参数有问题。
我究竟做错了什么?我传入了矩阵的维度(NxN),但我一定遗漏了一些东西。
这些是它给我的错误,它使我感到困惑而不是澄清:
数组可能没有这种类型的元素(函数参数)
“矩阵”缺少下标(函数参数)
'void print(const int,char [][])':无法将参数 2 从 'char [3][3]' 转换为 'char [][]'(我在 main 中调用函数)
// Function that has problems
void print(const int size, char matrix[][]) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cout << matrix[i][j];
}
cout << endl;
}
return;
}
// MAIN
int main() {
const int n = 3;
char matrix[n][n] = {'a', 'b', 'c',
'h', 'i', 'd',
'g', 'f', 'e'};
print(n, matrix); // Calling function here
return 0;
}
解决方案
clang 说:#1 与 x86-64 gcc(主干):2:42:错误:将“矩阵”声明为多维数组必须具有除第一个维度之外的所有维度的边界 - godbolt.org/g/qgnHTy
请记住,为了进行 array2d[i][j] 查找,它必须能够访问 i * length + j 处的元素,但编译器不知道矩阵的长度是多少,因为你没有放它在类型中。编译器不知道大小参数是相关的。
#include <iostream>
using namespace std;
// Function that has problems
template<int size>
void print(char matrix[][size]) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cout << matrix[i][j];
}
cout << endl;
}
return;
}
// MAIN
int main() {
constexpr int n = 3;
char matrix[n][n] = {'a', 'b', 'c',
'h', 'i', 'd',
'g', 'f', 'e'};
print<n>(matrix); // Calling function here
return 0;
}
推荐阅读
- r - 查找数据框列中每个值的第一个较低值
- html - 网页右侧多余的空间导致水平滚动条
- javascript - 在 onSubmit 之前创建一个 onClick 事件
- python - 在 AWS 上使用自定义标记器序列化/反序列化 tfidf-vectorizer
- r - 进程变成僵尸,而 r 并行会话仍在工作
- java - 如何解决 java.lang.LinkageError org.bouncycastle.mail.smime.SMIMESignedGenerator.generate(Ljavax/mail/internet/MimeBodyPart;)
- php - Laravel:如何将变量从一个函数传递给另一个来自同一控制器中的ajax调用的函数
- java - 如何解决vocareum中的这些错误
- spring - Spring REST 控制器未启动
- docker - 从 miniconda3 docker 镜像运行 Jupyter Notebook