通过另一个类中的指针访问多维数组的元素

时间:2013-01-05 20:29:02

标签: c++ pointers multidimensional-array

我在int costMap[20][20];课程中有一个dialog

在该类中,我正在从另一个名为pathFind

的类中创建一个对象
int costMap[20][20];
//costMap is filled with values (that represent the cost for each node -> pathFinder)
int (*firstElement)[20] = costMap;
pathFind *finder = new pathFind(*firstElement);

我希望能够访问pathFind

中的多维数组的值
int (*costMap)[20];

pathFind::pathFind(int *map){
    costMap = ↦
}

然而,这似乎不起作用。我得到一个“无法将int **转换为int(*)[20]错误。

问题:如何通过另一个类中的指针访问多维数组的元素

3 个答案:

答案 0 :(得分:1)

你必须写

pathFind::pathFind(int (*map)[20]){ ... }

但这是 C ++ 你可能会发现这更好:

template< std::size_t N, std::size_t M >
pathFind::pathFind(int (&map)[N][M]){ ... }

答案 1 :(得分:1)

pathFind::pathFind(int *map){

这需要一个指向整数的指针。

在其他地方,您已经发现了正确的类型:

pathFind::pathFind(int (*map)[20]){

尽量避免使用这个指针hackery。

答案 2 :(得分:1)

你应该这样做:

pathFind::pathFind(int (*map)[20] ){
    costMap = map;
}

匹配类型!

另请注意,T (*)[N]T**不是兼容类型。一个人无法转换为其他人。在您的代码中,您正在尝试这样做,这就是错误消息告诉您的内容。

此外,您的代码还有其他问题,例如您应该避免使用new和原始指针。使用标准库中的std::vector或其他容器,当您需要指针时,请使用std::unique_ptrstd::shared_ptr,以满足您的需要。