无法分配tr1 :: shared_ptr

时间:2010-06-01 19:40:13

标签: c++ variable-assignment shared-ptr

我有一个有tr1 :: shared_ptr作为成员的类,如下所示:

class Foo
{
    std::tr1::shared_ptr<TCODBsp> bsp;

    void Bar();
}

在成员函数栏中,我尝试像这样分配它:

bsp = newTCODBsp(x,y,w,h);

g ++然后给我这个错误

no match for ‘operator=’ in ‘((yarl::mapGen::MapGenerator*)this)->yarl::mapGen::MapGenerator::bsp = (operator new(40u), (<statement>, ((TCODBsp*)<anonymous>)))’ /usr/include/c++/4.4/tr1/shared_ptr.h:834: note: candidates are: std::tr1::shared_ptr<TCODBsp>& std::tr1::shared_ptr<TCODBsp>::operator=(const std::tr1::shared_ptr<TCODBsp>&)

在我的代码中,Foo实际上是yarl::mapGen::MapGenerator。我做错了什么?

2 个答案:

答案 0 :(得分:6)

致电.reset(new TCODBsp)或说bsp = std::tr1::shared_ptr(new TCODBsp)。共享指针是显式的。你不能只为它们分配ptr类型。

答案 1 :(得分:1)

您无法为共享指针分配本机指针。必须使用该值初始化shared_ptr,或者可以使用本机指针值调用reset()。