我有一个有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
。我做错了什么?
答案 0 :(得分:6)
致电.reset(new TCODBsp)
或说bsp = std::tr1::shared_ptr(new TCODBsp)
。共享指针是显式的。你不能只为它们分配ptr类型。
答案 1 :(得分:1)
您无法为共享指针分配本机指针。必须使用该值初始化shared_ptr,或者可以使用本机指针值调用reset()。