c++ - 错误 C2662 问题

标签 c++ c visual-studio-2010 visual-c++

我正在做一些程序,到目前为止在实现方面一直很好,但是现在我遇到了一些微不足道的问题,但我无法找到解决方案。问题出在这部分代码中,它说

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/

相关文章:

c++ - g++/minGW 可以与 Windows SDK 配合使用吗? Visual Studio 是唯一的选择吗?

c++ - 将 boost::multiprecision 实数转换为整数

c - strsep() 函数 - 分隔符中包含更多字符

c# - 卸载 MS Word 插件

c++ - 删除不同位置的指针会导致不同的行为(崩溃与否)

c++ - Istream 失败。什么是安全的使用方法!

c - 如何在 C 中声明和使用包含 10 亿个整数的巨大数组?

c - 共享变量[RTOS]

asp.net - VS2010本地资源后缀问题

visual-studio-2010 - 如何将Visual Studio 2013项目转换为Visual Studios 2010?