错误C2662问题

Ser*_*der 1 c c++ visual-studio-2010 visual-c++

我正在做一些程序,到目前为止这是关于实现的好,但是现在我遇到了一些琐碎的问题,但是我无法找到解决方案.问题在于代码的这一部分,它说

错误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(); 
   }
   };
Run Code Online (Sandbox Code Playgroud)

提前致谢.

In *_*ico 5

你有这个:

Smetler* copy() const { return new Smetler* (*this); }    
Run Code Online (Sandbox Code Playgroud)

这不会分配Smetler对象.它分配一个类型的指针Smetler.您正在尝试转换const Smetler&(这是该类型*thisconst函数)的Smetler*,这当然不会使一大堆的道理.

你可能想要的是这个:

Smetler* copy() const { return new Smetler(*this); }
Run Code Online (Sandbox Code Playgroud)

以上将Smetler在免费商店中分配一个新的,并将this对象复制到新的空间.您必须delete最终返回指针以避免内存泄漏.

你真正想要的是使用一个智能指针,这样你就不必担心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));
}
Run Code Online (Sandbox Code Playgroud)

或者,如果你可以使用C++ 11,那就使用更优越的std::unique_ptr,没有任何auto_ptr问题.

std::unique_ptr<Smetler> copy() const
{
    return std::unique_ptr<Smetler>(new Smetler(*this));
}
Run Code Online (Sandbox Code Playgroud)

以上代码片段将有助于防止内存泄漏(并且首先不必担心它们!)