0

我有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] 错误。

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

4

3 回答 3

1

你必须写

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

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

template< std::size_t N, std::size_t M >
pathFind::pathFind(int (&map)[N][M]){ ... }
于 2013-01-05T20:31:58.703 回答
1
pathFind::pathFind(int *map){

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

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

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

不过,尽量避免这种指针黑客行为。

于 2013-01-05T20:32:21.367 回答
1

你应该做这个:

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

也就是说,匹配类型!

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

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

于 2013-01-05T20:33:11.747 回答