[問題] class 如何使用 a.b.c

看板C_and_CPP (C/C++)作者 (麵T)時間11年前 (2014/06/28 18:11), 11年前編輯推噓7(7011)
留言18則, 7人參與, 最新討論串1/1
class vector3 { private: double x,y,z; public: vector3(); double getx(); void setXYZ(double,double,double); ... }; /////////////////////////////////////////////////////// class force{ private: vector3 fa,fb,fc; public: vector3 getFa(); //這邊不會寫 double getPI(); ... }; vector3 force::getFa(){ return fa; } double force::getPI(){ return 3.14; } /////////////////////////////////////////////////////// void main(){ force F; double fa_x = F.getFa().getx(); //預期得到fa_x ^^^^^^^^ 這邊 OK 了(只是 BCB 沒跳自動提示而已) 但後面 .getX() 無法成功編譯 } 目前想到的辦法是把 vector3 fa,fb,fc 宣告成 public, 但除了這樣之外,請問還有其他辦法可解決嗎? -- 我是麵T,哩賀 http://ppt.cc/-eS5 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.82.214 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1403950281.A.3E0.html

06/28 18:37, , 1F
compile不過嗎?
06/28 18:37, 1F
這邊 OK 了(只是 BCB 沒跳自動提示而已) 但後面 .getX() 無法成功編譯 用這種寫法就算可以 F.fa.getX(),但也無法 F.fa.setXYZ(1,2,3) 吧? ※ 編輯: noodleT (36.237.82.214), 06/28/2014 18:53:56

06/28 19:40, , 2F
可以貼一下你的錯誤訊息嗎?
06/28 19:40, 2F

06/28 20:47, , 3F
你的敘述好像有一點打不到點...如果我沒猜錯的話
06/28 20:47, 3F

06/28 20:48, , 4F
你的問題應該將 getFa() 改成回傳 vector3& 即可解決
06/28 20:48, 4F

06/28 20:50, , 5F
你是想藉由 F.getFa() 來存取那裡面的 vector3 吧?
06/28 20:50, 5F

06/28 20:50, , 6F
這樣的話就不應該 return by value, 這會複製一份那個物件
06/28 20:50, 6F

06/28 22:18, , 7F
你說的沒錯,回傳vector3&還是有問題
06/28 22:18, 7F

06/28 22:25, , 8F
這 code 看得有點頭痛. 不過錯誤訊息究竟是 ?
06/28 22:25, 8F

06/28 22:38, , 9F
把F改成Jedi就能用了 (誤
06/28 22:38, 9F

06/28 23:12, , 10F
你的vector3沒有assign constructor吧我想
06/28 23:12, 10F

06/28 23:12, , 11F
打錯 copy constructor
06/28 23:12, 11F

06/29 01:01, , 12F
樓上是在 return by value 時才會有的問題
06/29 01:01, 12F

06/29 01:02, , 13F
是說改成回傳 ref 之後是什麼問題? 錯誤訊息能貼上來嗎?
06/29 01:02, 13F
完整程式碼:http://ideone.com/SZg3Uf (希望有比較清楚) 錯誤訊息(DEV C++):insufficient contextual information to determine type ※ 編輯: noodleT (36.237.82.214), 06/29/2014 01:14:13

06/29 01:41, , 14F
我漏了什麼typedef沒看到嗎 這仍然是return by value啊
06/29 01:41, 14F

06/29 09:54, , 15F
你的code打錯了啊 你要F.getF1().getX() 你的getF1
06/29 09:54, 15F

06/29 09:55, , 16F
沒有加 " () " 啊
06/29 09:55, 16F

06/29 09:55, , 17F
因為你的getX()左邊是 F.getF1 他會去找有沒有這種class
06/29 09:55, 17F

06/29 09:56, , 18F
因為沒有 所以他說他不知道怎麼決定type(錯誤訊息)
06/29 09:56, 18F
文章代碼(AID): #1JhfJ9FW (C_and_CPP)
文章代碼(AID): #1JhfJ9FW (C_and_CPP)