[問題] struct array傳遞問題

看板C_and_CPP作者 (chocolate)時間6年前 (2018/01/10 03:02), 6年前編輯推噓6(6022)
留言28則, 8人參與, 6年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Windiw 7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) CodeBlock 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) none 問題(Question): 我想要將一個結構陣列傳進副程式 並在副程式當中作一些判斷 但是當我傳入並想做一些簡單的測試時 就發生錯誤了 希各位大大能幫忙解惑 感恩 錯誤結果(Wrong Output): 錯誤資訊 no match for 'operator[]' (operand types are 'Maze' and 'int') 程式碼(Code):(請善用置底文網頁, 記得排版) https://ideone.com/LE97Ei 補充說明(Supplement): 我 Maze maze[x+1][y+1] 的這種方式好像也不是很好 是否可教我改寫 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.226.182 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1515524572.A.9F9.html

01/10 03:41, 6年前 , 1F
和不用 vector<vector<maze>>
01/10 03:41, 1F
因為新手還是覺得array最直觀 哈哈 晚點來試試 vector

01/10 04:04, 6年前 , 2F
二維陣列是兩個星星
01/10 04:04, 2F
但是我改成這樣 https://ideone.com/q3tsem 還是會有錯 錯誤訊息:cannot convert Maze (*)[(y + 1)] to‘Maze** for argument‘1' to‘ void check_consistent(Maze**, int, int)’ 是不是跟我array大小是變動的有關

01/10 08:42, 6年前 , 3F
用指標傳
01/10 08:42, 3F
請問我這樣不是用指標傳嗎 還是我哪裡誤會了

01/10 09:53, 6年前 , 4F
也許當初語法糖這東西真的害人不淺 XD
01/10 09:53, 4F

01/10 15:10, 6年前 , 5F
如果不用STL,可以傳陣列的reference
01/10 15:10, 5F
但是據我所知 call by reference 他的陣列大小要是固定的 但是我的陣列大小是讓使用者隨機輸入的 這樣可以嗎 ※ 編輯: cozychocolat (140.114.79.52), 01/10/2018 16:05:52

01/10 16:17, 6年前 , 6F
隨機輸入就不是嚴格意義的陣列了,請用vector
01/10 16:17, 6F
好的 我會試試

01/10 16:46, 6年前 , 7F
雖然不知道你到底想要做啥 不過會動的code https://ide
01/10 16:46, 7F

01/10 16:46, 6年前 , 8F
one.com/Cq75my
01/10 16:46, 8F
真的是太感謝了 我會好好研究 ※ 編輯: cozychocolat (140.114.79.52), 01/10/2018 16:56:40

01/10 21:52, 6年前 , 9F
傳array的時候只有最高維可以不用知道大小
01/10 21:52, 9F

01/10 22:11, 6年前 , 10F
因為那個實際上不是傳陣列,只是傳指標
01/10 22:11, 10F

01/13 02:11, 6年前 , 11F
你函數宣告要寫成
01/13 02:11, 11F

01/13 02:11, 6年前 , 12F
void check_consistent(struct Maze (* maze)[10],
01/13 02:11, 12F

01/13 02:11, 6年前 , 13F
int y){ ... }
01/13 02:11, 13F

01/13 02:12, 6年前 , 14F
那個10是maze[a][b]裡面的b,也就是array外層的大小
01/13 02:12, 14F

01/13 02:13, 6年前 , 15F
參考本版C++新手13戒的第12條
01/13 02:13, 15F

01/13 02:13, 6年前 , 16F
之所以要寫成struct Maze (* maze)是因為沒有那個括號的話
01/13 02:13, 16F

01/13 02:14, 6年前 , 17F
就會變成(struct Maze *) maze
01/13 02:14, 17F

01/13 02:14, 6年前 , 18F
兩者意義完全不一樣
01/13 02:14, 18F

01/13 02:15, 6年前 , 19F
還有,我覺得check_consistent(maze, x, y);
01/13 02:15, 19F

01/13 02:15, 6年前 , 20F
應該要放在for裡面
01/13 02:15, 20F

01/13 02:16, 6年前 , 21F
其實前面x,y,num..那些沒有給初值,其實很危險
01/13 02:16, 21F

01/13 02:17, 6年前 , 22F
一樣參考本版教條的第一條
01/13 02:17, 22F
感謝以上各位大師的講解 我後來就改用vector寫了 也謝謝dzwei大最後給的建議 感謝各位幫忙 ※ 編輯: cozychocolat (106.1.226.182), 01/14/2018 03:16:15

01/14 03:53, 6年前 , 23F
勘誤一下
01/14 03:53, 23F

01/14 03:53, 6年前 , 24F
「maze[a][b]裡面的b」
01/14 03:53, 24F

01/14 03:53, 6年前 , 25F
那個b是內層
01/14 03:53, 25F

01/24 11:34, 6年前 , 26F
真要傳多多維度的不定陣列,可以用樣板
01/24 11:34, 26F

01/24 11:34, 6年前 , 27F

01/24 11:36, 6年前 , 28F
總體來說還是跟上面大大一樣,建議用vector省事~
01/24 11:36, 28F
文章代碼(AID): #1QLH7Sdv (C_and_CPP)