[問題] Operator overloading in Obj-C

看板C_and_CPP (C/C++)作者 (三腳貓的把戲)時間16年前 (2010/01/12 20:31), 編輯推噓7(703)
留言10則, 5人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚)  我定義了一個 class 要來處理 3D 向量。寫了一段簡單的程式: int main() { float fT = 1; point3 vecA = point3( 1, 1, 1 ); point3 vecB = point3( 2, 2, 2 ); point3 vecR = vecA * fT * fT + vecB * fT * fT; return 0; }  這個程式在 Windows C++ 環境下執行沒有問題,  但要移到 Obj-C 上(Xcode 平台)complie 就過不了了。  錯誤訊息: /Users/yehdavid/Desktop/Untitled1/Overloading.cpp:12: error: no match for 'operator+' in 'vecA. CM3dVector3f::operator*(fCurrT).CM3dVector3f::operator*(fCurrT) + vecB. CM3dVector3f::operator*(fCurrT).CM3dVector3f::operator*(fCurrT)'  若稍微改寫一下程式變成這樣子... int main() { float fT = 1; point3 vecA = point3( 1, 1, 1 ); point3 vecB = point3( 2, 2, 2 ); point3 vecR1 = vecA * fT * fT; point3 vecR2 = vecB * fT * fT; point3 vecR = vecR1 + vecR2; return 0; }  就能順利 complie,完成我要的運算...  請問,為什麼第一種寫法過不了關呢?該要怎麼做呢?  底下附上 class 的定義: class point3 { float x; float y; float z; public: point3() {}; point3( float fx, float fy, float fz ) { x = fx; y = fy; z = fz; } point3 operator + ( point3 &v ) { return point3( x + v.x, y + v.y, z + v.z ); } point3 operator * ( float f ) { return point3( x * f, y * f, z * f ); } }; --  追根究底所得到的東西,是失望的觀眾,以及狼狽的魔術師... De'Ring Practice http://www.wretch.cc/blog/miauwally/21246514 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.90.104

01/12 20:50, , 1F
過...
01/12 20:50, 1F

01/12 20:56, , 2F
有沒有編譯過不了卻不看錯誤訊息的八卦?
01/12 20:56, 2F
※ 編輯: archon 來自: 122.116.90.104 (01/12 21:03)

01/12 21:16, , 3F
obj-c似乎不支援operator overloading ?
01/12 21:16, 3F

01/12 21:41, , 4F
真是個殘酷的事實... ( ̄□ ̄|||)a
01/12 21:41, 4F

01/12 21:50, , 5F
我猜是 compiler 看不懂 + 的兩邊其實是 point3...
01/12 21:50, 5F

01/12 21:51, , 6F
雖然我不太懂 obj-c 原PO要不要試試改成 (...)+(...) 這樣?
01/12 21:51, 6F

01/12 23:02, , 7F
不是,我看不懂這個哪裡obj-c了...明明就是c++啊?
01/12 23:02, 7F

01/12 23:27, , 8F
這比較像是有overloading operator的java
01/12 23:27, 8F

01/12 23:30, , 9F
後面 (vecB* ...) 試看看
01/12 23:30, 9F

01/13 09:58, , 10F
(...)+(...) 也不 work... 但還是很感謝大家的參與 QwQ
01/13 09:58, 10F
文章代碼(AID): #1BJ6k9vr (C_and_CPP)
文章代碼(AID): #1BJ6k9vr (C_and_CPP)