C++ 类函数,该函数在为常量时返回指向自身的指针。c++;

C++ 类函数,该函数在为常量时返回指向自身的指针。c++;,c++,pointers,constants,C++,Pointers,Constants,以下是我尝试过的: game* Reversi::clone() const{ Reversi* ptr = this; return ptr; } 但我收到以下错误: error: invalid conversion from ‘const Reversi*’ to ‘Reversi*’ [-fpermissive] Reversi* ptr = this; 提前感谢。此的类型是const Reversi*在const成员函数中。您可以使用非常量成员函数 game* Re

以下是我尝试过的:

game* Reversi::clone() const{
    Reversi* ptr = this;
    return ptr;
}
但我收到以下错误:

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

提前感谢。

的类型是
const Reversi*
在const成员函数中。您可以使用非常量成员函数

game* Reversi::clone() {
    Reversi* ptr = this;
    return ptr;
}
或者将
ptr
的类型更改为
const Reversi*

const game* Reversi::clone() const {
    const Reversi* ptr = this;
    return ptr;
}
顺便说一句:你的代码只是复制一个指针
这个
,根本不复制内容。这意味着返回的指针将只指向同一个对象。你可能想要

game* Reversi::clone() const {
    Reversi* ptr = new Reversi(*this); // use copy ctor here
    return ptr;
}

注意:当您从
复制时,成员函数可以是
const
。这似乎更合理,因为克隆方法通常不应更改原始对象的状态。

这是一个非常糟糕的克隆功能。它实际上并没有克隆任何东西。哦,是的!告诉多兰·以利亚教授打招呼。:)@埃里普,我一定会这么做的!我有点难过,他只教到2401。在你的第三个样本中,他是一个了不起的专家,这个方法可以是
const
,而且可能应该是这样。就是这样!我简直不敢相信我竟然没有想到要用新的。。谢谢你,先生。