我正在做一些程序,到目前为止关于实现这么好,但是现在我遇到了一些微不足道的问题,但是我无法找到解决方案。问题在于代码的这一部分,它说
错误1错误C2662:'Smetler :: action':无法将'this'指针从'const Smetler'转换为'Smetler&'
任何人都知道这里的问题是什么,因为我确信我已经应用了所有的内容。
virtual void action()
{
std::cout << "I'm a copy" << copy() << ". Doing observations." << std::endl;
}
Smetler* copy() const { return new Smetler (*this); }
private:
void writeDown(ostream& wd) const
{
wd << Worker::getOccupation() << " " << Worker::getName() << ',' << Worker::getPosition() << action();
}
};
提前致谢。
答案 0 :(得分:5)
你有这个:
Smetler* copy() const { return new Smetler* (*this); }
这不会分配Smetler
个对象。它分配一个类型为Smetler
的指针。您正在尝试将const Smetler&
(*this
函数中const
的类型)转换为Smetler*
,这当然不会很有道理。
你可能想要的是:
Smetler* copy() const { return new Smetler(*this); }
以上将在免费商店中分配新的 Smetler
并将this
对象复制到新空间。最后必须delete
返回的指针以避免内存泄漏。
你真正想要的是使用智能指针,这样你就不必担心delete
来自copy()
的返回指针。在C ++ 03中,您可以使用std::auto_ptr
(虽然它已被弃用,因为它可能会在不安全的情况下被意外使用,例如您无法在{{1}等容器中使用auto_ptr
}}):
std::vector
或者,如果您可以使用C ++ 11,请使用更加优越的std::auto_ptr<Smetler> copy() const
{
return std::auto_ptr<Smetler>(new Smetler(*this));
}
,它不会遇到std::unique_ptr
个问题。
auto_ptr
以上代码片段都有助于防止内存泄漏(并且首先不必担心它们!)