看板 C_and_CPP 關於我們 聯絡資訊
請問一下,我的一個類別 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
LPH66:GetID() 加個 const 宣告如何? (ie. int& GetID() const;) 09/07 13:51
QQ29:L大 一般不是你 加上const 回傳的地方也該加上 const int &嘛 09/07 14:01
QQ29:還是只是為了滿足他這case 希望還可以使用==設值@@ 09/07 14:03
tyc5116:Q大,我不懂的地方就在於為何回傳值一定要const int& 09/07 15:06
tyc5116:因為我在另一個專案測試的時候是不用的,所以我想問一下 09/07 15:06
tyc5116:目前這樣compile不過的原因是?? 09/07 15:07
QQ29:如果你只寫 int &GetID() const; 你可以在外部(main)寫 09/07 15:20
QQ29:xxx.GetID()=值 這就失去了你原本寫 const的意義 09/07 15:20
QQ29:可以看 effective c++ 條款3 他還有分兩派說法 但是我不太懂 09/07 15:22
QQ29:他表達的用意 09/07 15:22
sponge0121:vTP是reference to constant object 09/07 16:45
sponge0121:只允許const member function call 所以如一樓L大所說 09/07 16:46
sponge0121:將GetID()宣告成const 應該就OK了 09/07 16:47