[語法] 關於operator==

看板C_and_CPP作者 (累人啊....)時間14年前 (2009/09/07 13:30), 編輯推噓5(508)
留言13則, 4人參與, 最新討論串1/3 (看更多)
請問一下,我的一個類別 class TPGra{ public: TPGra(int vID,Point vOrigin_Position); void SetID(int vID); int& GetID(); bool operator == (const TPGra& vTP); private: int ID; }; 其operator==實作為 bool TPGra::operator ==(const TPGra& vTP){ return this->GetID()==vTP.GetID(); } 但都會顯示 TPGra::GetID' : 無法將 'this' 指標從 'const TPGra' 轉換成 'TPGra & 我想了很久都不知道錯是錯在哪...@@ 然後我另外開一個專案作測試,結果同樣的程式碼竟然可以正常執行.....@@ 請問這一段是哪個地方有錯嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.48.28

09/07 13:51, , 1F
GetID() 加個 const 宣告如何? (ie. int& GetID() const;)
09/07 13:51, 1F

09/07 14:01, , 2F
L大 一般不是你 加上const 回傳的地方也該加上 const int &嘛
09/07 14:01, 2F

09/07 14:03, , 3F
還是只是為了滿足他這case 希望還可以使用==設值@@
09/07 14:03, 3F

09/07 15:06, , 4F
Q大,我不懂的地方就在於為何回傳值一定要const int&
09/07 15:06, 4F

09/07 15:06, , 5F
因為我在另一個專案測試的時候是不用的,所以我想問一下
09/07 15:06, 5F

09/07 15:07, , 6F
目前這樣compile不過的原因是??
09/07 15:07, 6F

09/07 15:20, , 7F
如果你只寫 int &GetID() const; 你可以在外部(main)寫
09/07 15:20, 7F

09/07 15:20, , 8F
xxx.GetID()=值 這就失去了你原本寫 const的意義
09/07 15:20, 8F

09/07 15:22, , 9F
可以看 effective c++ 條款3 他還有分兩派說法 但是我不太懂
09/07 15:22, 9F

09/07 15:22, , 10F
他表達的用意
09/07 15:22, 10F

09/07 16:45, , 11F
vTP是reference to constant object
09/07 16:45, 11F

09/07 16:46, , 12F
只允許const member function call 所以如一樓L大所說
09/07 16:46, 12F

09/07 16:47, , 13F
將GetID()宣告成const 應該就OK了
09/07 16:47, 13F
文章代碼(AID): #1Af9fkYD (C_and_CPP)
文章代碼(AID): #1Af9fkYD (C_and_CPP)