2015-12-06 73 views
2

這是我已經試過:類函數返回一個指向自己的指針,同時是const。 C++

game* Reversi::clone() const{ 
    Reversi* ptr = this; 
    return ptr; 
} 

但我收到以下錯誤:

error: invalid conversion from ‘const Reversi*’ to ‘Reversi*’ [-fpermissive] 
Reversi* ptr = this; 

在此先感謝。

+2

這是一個很差的克隆功能。它實際上並不克隆任何東西。 – juanchopanza

+0

OU哦,是啊!告訴Dolan Elijah教授,你好。 :) – erip

+0

@erip我一定會那樣做!我有點傷心,他只教了2401.他是一個了不起的教授 – echo3

回答

3

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; 
} 

注意。這似乎更合理,因爲克隆方法一般不應改變原始對象的狀態。

+1

在你的第三個示例中,該方法可以做成const,並且它可能應該是。 – juanchopanza

+0

@juanchopanza是的,你是對的。 – songyuanyao

+0

就是這樣!我不相信我甚至沒有想過使用新的..謝謝先生。 – echo3

相關問題