我正在做一些程序,到目前为止在实现方面一直很好,但是现在我遇到了一些微不足道的问题,但我无法找到解决方案。问题出在这部分代码中,它说
Error 1 error C2662: 'Smetler::action' : cannot convert 'this' pointer from 'const Smetler' to '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();
}
};
提前致谢。
最佳答案
你有这个:
Smetler* copy() const { return new Smetler* (*this); }
这不会分配 Smetler
对象。它分配一个 Smetler
类型的指针。您正在尝试将 const Smetler&
(这是 const
函数中 *this
的类型)转换为 Smetler*
,这当然没有多大意义。
你可能想要的是:
Smetler* copy() const { return new Smetler(*this); }
上面将在空闲存储区分配一个新的Smetler
并将this
对象复制到新空间。您最终必须删除
返回的指针以避免内存泄漏。
您真正想要的是使用智能指针,这样您就不必担心 delete
- 从 copy()
返回的指针。在 C++03 中,您可以使用 std::auto_ptr
(尽管它已被弃用,因为它可能会意外地用于不安全的情况,例如您不能使用 auto_ptr
s 在像 std::vector
) 这样的容器中:
std::auto_ptr<Smetler> copy() const
{
return std::auto_ptr<Smetler>(new Smetler(*this));
}
或者,如果您可以使用 C++11,请使用更高级的 std::unique_ptr
,它没有任何 auto_ptr
的问题。
std::unique_ptr<Smetler> copy() const
{
return std::unique_ptr<Smetler>(new Smetler(*this));
}
上面的两个代码片段都将有助于防止内存泄漏(并且不必首先担心它们!)
关于c++ - 错误 C2662 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088790/