如何在C ++中修复此创建向量

时间:2013-08-31 19:07:42

标签: c++ boost vector

我正在用C ++编写一个程序,我希望包含vector类型Hilo - &gt; vector<Hilo>,(Hilo是一个包含boost :: thread的类,它修改hilo的属性本身..)。当文件中创建向量时出现错误:{{{{{{{{{ 1}}。向量的创建有什么问题?我试过用这些方法创建它:  1.

agregarHilo

或2.(正如我之前所说,矢量是在Operaciones.cpp的方法 Hilo * hil = new Hilo(this->contadorHilos,tiempo_vida); vecHilos.push_back(hil); 中创建的..这是完整的代码)谢谢。

agregarHilo

1 个答案:

答案 0 :(得分:0)

我相信你的问题在于vecHilos.push_back(Hilo(this->contadorHilos,tiempo_vida));行。在这一行中,您将创建一个新的const Hilo对象,然后将其复制到vecHilos的后面。

您的大部分课程都可以毫不费力地复制,但boost::thread不可复制:

  

boost :: thread类负责启动和管理   线程。每个boost :: thread对象代表一个单独的线程   执行,或非线程,最多一个boost :: thread对象   表示给定的执行线程:boost :: thread类型的对象   是不可复制的。

您应该能够通过从代码中删除boost::thread的所有实例来验证此行为,然后应该编译正常(除非有其他错误)。

在这种情况下,您需要为Hilo编写自己的副本(或移动)构造函数,并处理线程的复制/移动。例如(未经测试,可能不是最佳解决方案):

// Move constructor
Hilo::Hilo(Hilo&& old)
  : id(_hilo.id), mensaje(_hilo.mensaje), tiempo_vida(_hilo.tiempo_vida),
    hilo(std::move(_hilo.hilo)) {}