2013-01-05 70 views
0

我在dialog類中有一個int costMap[20][20];通過另一個類中的指針訪問多維數組的元素

該類我正在從所謂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]錯誤

問題:你怎麼能存取權限多維數組的元素低谷另一個類的指針

+1

類名中可能沒有'.'。 –

+0

什麼行給出錯誤? –

+0

@LightnessRacesinOrbit :: p – Thomas

回答

1

你應該這樣做:

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

也就是說,匹配的類型!

另請注意,T (*)[N]T**不是兼容類型。一個不能轉換爲其他。在你的代碼中,你試圖做到這一點,這是錯誤信息告訴你的。

此外,您的代碼還有其他問題,例如您應該避免使用new和原始指針。使用std::vector或標準庫中的其他容器,當您需要指針時,更喜歡使用std::unique_ptrstd::shared_ptr,以符合您的需求爲準。

+0

這不是一個真正的'也'。這是同一件事! –

+0

謝謝;我會嘗試使用std :: vector – Thomas

1

你將不得不寫

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

但這是C++你會發現這更好:

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

int * map [20]'不正確。 –

+0

@Lightness軌道賽:真的,謝謝。這表明我永遠不會這樣做 –

+0

確實是一個很好的理由:D –

1
pathFind::pathFind(int *map){ 

這需要一個指向整數的指針。

在其他地方,你已經發現了正確的類型使用方法:

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

儘量避免這種指針兩輪牛車,雖然。

相關問題