2014-09-26 56 views
0

我正在处理C++中数组的传递。下面的作品,我提供的定义与数字数组,如:传递定义二维数组元素大小的变量

gen0[6][7]. 

但是,我不能说,我送一个变量作为我的尺寸参数的方法。我意识到我可能需要将它们作为指针或引用来传递。我在别处看到使用unsigned int,没有工作。我尝试了一些变化,但我正在为整个概念而努力。任何提示/建议将不胜感激!

//in main 
int col1, col2; 
col1 = rand() % 40 + 1; 
col2 = rand() % 50 +1; 
int gen0[col1][col2]; 
print(gen0) 

//not in main 
template<int R, int C> 
void print(int (&array)[R][C]) 
+0

你得到一个错误?究竟是什么问题? – 0x499602D2 2014-09-26 03:38:28

+0

查看如何使用'new []'和'delete []'在堆上分配(和取消分配!)数组的数组 - 这会让您使用在运行时而不是编译时确定的大小。 – Cameron 2014-09-26 03:57:39

+1

您正在定义的VLA(可变长度数组)不是C++标准的一部分。不要指望它像现在这样工作。它们作为实现扩展提供。模板提供在*编译时*完成。您的数组维度在* run-time *处定义。我的建议是使用'std :: vector '并旋转基于迭代器的打印解决方案。 – WhozCraig 2014-09-26 04:00:06

回答

1

VLA(可变长度数组)是一些编译器的扩展,它在运行时完成。

而:

template<int R, int C> void print(const int (&array)[R][C]) 

是通过引用传递多维数组的正确方法,这是在编译时完成,并与VLA不相容。

另一种可能是使用std::vector

std::vector<std::vector<int>> gen0(col1, std::vector<int>(col2)); 

而且

void print(const std::vector<std::vector<int>>& array)