這是我已經試過:類函數返回一個指向自己的指針,同時是const。 C++
game* Reversi::clone() const{
Reversi* ptr = this;
return ptr;
}
但我收到以下錯誤:
error: invalid conversion from ‘const Reversi*’ to ‘Reversi*’ [-fpermissive]
Reversi* ptr = this;
在此先感謝。
這是我已經試過:類函數返回一個指向自己的指針,同時是const。 C++
game* Reversi::clone() const{
Reversi* ptr = this;
return ptr;
}
但我收到以下錯誤:
error: invalid conversion from ‘const Reversi*’ to ‘Reversi*’ [-fpermissive]
Reversi* ptr = this;
在此先感謝。
this
的類型是const Reversi*
裏面的const成員函數。您可以使用非const成員函數,
game* Reversi::clone() {
Reversi* ptr = this;
return ptr;
}
或改變ptr
類型const Reversi*
,
const game* Reversi::clone() const {
const Reversi* ptr = this;
return ptr;
}
BTW:你的代碼只是使指針this
的副本,不會複製所有的內容。這意味着返回的指針將指向同一個對象。當您從this
副本的成員函數可能是const
你可能想,
game* Reversi::clone() const {
Reversi* ptr = new Reversi(*this); // use copy ctor here
return ptr;
}
注意。這似乎更合理,因爲克隆方法一般不應改變原始對象的狀態。
在你的第三個示例中,該方法可以做成const,並且它可能應該是。 – juanchopanza
@juanchopanza是的,你是對的。 – songyuanyao
就是這樣!我不相信我甚至沒有想過使用新的..謝謝先生。 – echo3
這是一個很差的克隆功能。它實際上並不克隆任何東西。 – juanchopanza
OU哦,是啊!告訴Dolan Elijah教授,你好。 :) – erip
@erip我一定會那樣做!我有點傷心,他只教了2401.他是一個了不起的教授 – echo3