传递一个二维数组,Works in C但不是C ++

时间:2015-11-15 09:34:08

标签: c++ c arrays

我将二维数组传递给标记函数。

void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){}

这段代码在C代码块上完美运行,但在C ++中,我遇到的错误如下:

prog.cpp:9:55: error: use of parameter outside function body before ']' token
 void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){
                                                       ^
prog.cpp:9:56: error: expected ')' before ',' token
 void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){
                                                        ^
prog.cpp:9:58: error: expected unqualified-id before 'int'
 void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){

我在这里做错了吗?我在int m之前给出了列数,这是用C而不是C ++。任何帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

您声明的数组参数是variable-length arrays,而C ++中不允许这些参数。您必须以其他方式解决问题,例如使用模板std::vectorstd::array

请记住,C和C ++是两种截然不同的语言。 C ++最初可能是从C开发的,它们共享很多东西的语法,但它们仍然是不同规则的不同语言。

答案 1 :(得分:2)

只有C支持可变长度数组,而C ++则不支持。 C ++标准规定数组的大小必须是常量表达式。

请改用std::vector。宣言应该是

void mark(int n, int m, int i, int j, vector< vector<int> > &canvisit, vector< vector<int> > &a);