[問題] const reference

看板C_and_CPP作者 (sro1121)時間14年前 (2010/06/03 09:40), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/3 (看更多)
程式碼: IntArray(const IntArray &copy) { array = new int[copy.getSize()]; for(int i=0;i<copy.getSize();i++) array[i] = copy[i]; size = copy.getSize(); } 輸出: 1>.\test06.cpp(33) : error C2662: 'IntArray::getSize' : 無法將 'this' 指標從 'const IntArray' 轉換成 'IntArray &' 1> 轉換遺失限定詞 1>.\test06.cpp(34) : error C2662: 'IntArray::getSize' : 無法將 'this' 指標從 'const IntArray' 轉換成 'IntArray &' 1> 轉換遺失限定詞 1>.\test06.cpp(35) : error C2678: 二元運算子 '[' : 找不到使用左方運算元型別 'const IntArray' 的運算子 (或是沒有可接受的轉換) 1> .\test06.cpp(65): 可能是 'int &IntArray::operator [](int)' 1> 當嘗試符合引數清單 '(const IntArray, int)' 時 1>.\test06.cpp(36) : error C2662: 'IntArray::getSize' : 無法將 'this' 指標從 'const IntArray' 轉換成 'IntArray &' 1> 轉換遺失限定詞 如果將程式改為 IntArray(IntArray &copy) { array = new int[copy.getSize()]; for(int i=0;i<copy.getSize();i++) array[i] = copy[i]; size = copy.getSize(); } 或是 IntArray(const IntArray &copy) { array = new int[copy.size]; for(int i=0;i<copy.size;i++) array[i] = copy.array[i]; size = copy.size; } 就沒有問題 size, getSize() 皆為 public member getSize() 只有return size而已 有overload operator[] 想問的是為什麼加了const後就只能用member variable而不能用member function? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.107.184.218

06/03 10:04, , 1F
getSize() {...} 要改成 getSize() const {...}
06/03 10:04, 1F

06/03 10:04, , 2F
原因...請翻書 (煙
06/03 10:04, 2F

06/03 10:43, , 3F
const對象只能使用const成員函數~
06/03 10:43, 3F

06/03 16:09, , 4F
謝謝l大和i大~
06/03 16:09, 4F
文章代碼(AID): #1C1mWVo1 (C_and_CPP)
文章代碼(AID): #1C1mWVo1 (C_and_CPP)