作者archon (三腳貓的把戲)
看板C_and_CPP
標題[問題] Operator overloading in Obj-C
時間Tue Jan 12 20:31:02 2010
遇到的問題: (題意請描述清楚)
我定義了一個 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
推 dendrobium:過... 01/12 20:50
推 dendrobium:有沒有編譯過不了卻不看錯誤訊息的八卦? 01/12 20:56
※ 編輯: archon 來自: 122.116.90.104 (01/12 21:03)
推 dendrobium:obj-c似乎不支援operator overloading ? 01/12 21:16
→ archon:真是個殘酷的事實... ( ̄□ ̄|||)a 01/12 21:41
推 LPH66:我猜是 compiler 看不懂 + 的兩邊其實是 point3... 01/12 21:50
→ LPH66:雖然我不太懂 obj-c 原PO要不要試試改成 (...)+(...) 這樣? 01/12 21:51
推 Dannvix:不是,我看不懂這個哪裡obj-c了...明明就是c++啊? 01/12 23:02
推 goosey:這比較像是有overloading operator的java 01/12 23:27
推 goosey:後面 (vecB* ...) 試看看 01/12 23:30
→ archon:(...)+(...) 也不 work... 但還是很感謝大家的參與 QwQ 01/13 09:58