作者sro1121 (sro1121)
看板C_and_CPP
標題[問題] const reference
時間Thu Jun 3 09:40:44 2010
程式碼:
IntArray(const IntArray ©)
{
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 ©)
{
array = new int[copy.getSize()];
for(int i=0;i<copy.getSize();i++)
array[i] = copy[i];
size = copy.getSize();
}
或是
IntArray(const IntArray ©)
{
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