我把它划分为裸骨代码。本质上,我需要将2d数组传递给函数,但是在执行时会从文本文件中读取数组的大小。我在这个主题上读过的所有内容都说这是实现它的方法,但编译器却说不然。这是代码:
#include <iostream>
using namespace std;
template <size_t r, size_t c>
void func(int (&a)[r][c])
{
return;
}
int main()
{
int rows = 5;
int cols = 6;
int Array[rows][cols];
func(Array);
return 0;
}
我宁愿避免使用载体,因为我对它们非常不熟悉。这是编译器的输出:
-------------- Build: Debug in test (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -fexceptions -g -c C:\Users\ME\Desktop\test\test\main.cpp -o obj\Debug\main.o
C:\Users\ME\Desktop\test\test\main.cpp: In function 'int main()':
C:\Users\ME\Desktop\test\test\main.cpp:20:15: error: no matching function for call to 'func(int [(((unsigned int)(((int)rows) + -0x000000001)) + 1)][(((unsigned int)(((int)cols) + -0x000000001)) + 1)])'
C:\Users\ME\Desktop\test\test\main.cpp:20:15: note: candidate is:
C:\Users\ME\Desktop\test\test\main.cpp:6:25: note: template<unsigned int r, unsigned int c> void func(int (&)[r][c])
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))
答案 0 :(得分:2)
在此代码中
int rows = 5;
int cols = 6;
int Array[rows][cols];
Array
不是普通的C ++多维数组,而是C99 可变长度数组或VLA。
它不是标准的C ++。
取而代之的是
int const rows = 5;
int const cols = 6;
int Array[rows][cols];
这是有效的,因为初始化表达式在编译时是已知的。
要避免此类问题,请将选项 -pedantic-errors
添加到您的g ++调用中。