我有一个向量定义为:
std::vector<std::shared_ptr<Orders> > vOrders;
当添加到vOrders
我想添加像:
vOrders.push_back(<std::shared_ptr<Orders> >([]() {
TimerForProcessingOrders _timerForProcessingOrders;
_timerForProcessingOrders.detach();
}));
但是编译器给我一个错误:
Expected expression: Expected '(' for function-style cast or type construction
看起来<
和>
周围都很奇怪,std::shared_ptr
但是将其删除会出现错误:
No matching conversion for functional-style cast from '<lambda >' to 'std::shared_ptr<Orders>'
我犯什么错误?
这段代码所做的(以一种不正确的方式)是将由lambda构造的对象,并将lambda本身存储到向量中,而不是shared_ptr<Order>
向量所需要的类型的对象。
但是编译器给我一个错误:
这是因为多余的< >
是完全无效的语法,因此编译器可以为您提供的最好的是“无效的表达式”。
std :: shared_ptr周围的<和>看起来很奇怪,但是删除它会出现错误:
No matching conversion for functional-style cast from '<lambda >' to 'std::shared_ptr<Orders>'
基本上,这里是shared_ptr<Orders>(/* .. Lambda .. */)
-编译器说它不知道如何将lambda变成anOrders*
并放入其中shared_ptr
。
您实际上想在这里完成什么?
如果您只想将指针转移到中,则shared_ptr
可以执行以下操作
TimerForProcessingOrders _timerForProcessingOrders;
std::shared_ptr<Orders> ptr(_timerForProcessingOrders.detach());
vOrders.emplace_back(std::move(ptr));
不需要lambda。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句