Re: [問題] class 沒辦法做連續的四則運算

作者: johnjohnlin (嗯?)   2014-09-27 18:03:42
簡單的說
就是是暫時變數不能當 reference
把你的 reference 拿掉就行了
或是用 C++11 裡面 rvalue reference
增加一個這樣的定義+宣告
friend CVector3 operator +(CVector3 &a, CVector3 &&b);
這兩個編譯都會過
不過這樣很麻煩,要寫兩次定義+宣告
我對 reference 也不是很熟
有更高明的人可以告訴我怎麼作比較好嗎 XD
※ 引述《noodleT (麵T)》之銘言:
: class CVector3{
: private:
: double e[3];
: public:
: friend CVector3 operator *(CVector3 &a, double p); //向量*常數
: friend CVector3 operator +(CVector3 &a, CVector3 &b);
: double &operator[](int);//元素操作
: };
: double &CVector3::operator[](int index){
: if (index < 3 && index >= 0){
: return e[index];
: }
: else{
: static double err = 0.0;
: return err;
: }
: }
: 和此網站:
: http://nknucc.nknu.edu.tw/~jwu/c/cpgch14.htm
: 的例7相比,我多了 &operator[] 的操作
: 目的是想要較方便的存取 e[0~2]
: 但卻造成我沒辦法做連續的向量運算,如:
: CVector3 a1,a2,b(1,2,3),c(4,5,6);//建構時可寫入初始值,上面程式碼省略
: a1=b+c; //這樣OK
: a1=b*2.0; //OK
: a2=b+c*2.0; //錯誤
: a2=b+(c*2.0); //也是錯誤
: 想請教這裡錯誤的原因為何?
作者: Caesar08 (Caesar)   2014-09-27 19:27:00
你需要const &

Links booklink

Contact Us: admin [ a t ] ucptt.com