错误使用已删除的功能

时间:2017-03-21 05:42:02

标签: c++

我试图在第一个循环中创建一个非阻塞调用列表,然后在第二个循环中等待。为什么我会删除功能?

std::list< vendorClient>  vendorQ;
for (auto &addr : vendors_) {
    vendorClient vendor();
    vendor.someFunc();
    vendorQ.push_back(vendor);
 }

 // Now block till they finish up
 while (vendorQ.size() >0) {
    vendorClient ven = vendorQ.front(); // ERROR use of deleted function <<<
    vendorQ.pop_front();
    //  ..more stuff
  }

1 个答案:

答案 0 :(得分:0)

vendorClient的复制构造函数可能已被显式声明删除:

vendorClient(cosnt vendorClient &) = delete;

或已被隐式删除。编译器可以为vary reasons执行此操作。如果是这样,您需要明确定义复制构造ven的复制构造函数。

实际上,您也可以尝试移动构造ven,因为vendorQ持有的实例会在之后立即销毁。

vendorClient ven = std::move(vendorQ.front());
vendorQ.pop_front();