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_ptrまたは必要に応じて使用することをお勧めしstd::shared_ptrます。

于 2013-01-05T20:33:11.747 に答える