看板 C_and_CPP 關於我們 聯絡資訊
程式碼: 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
littleshan:getSize() {...} 要改成 getSize() const {...} 06/03 10:04
littleshan:原因...請翻書 (煙 06/03 10:04
ilovebbs:const對象只能使用const成員函數~ 06/03 10:43
sro1121:謝謝l大和i大~ 06/03 16:09