Проблема с назначением tr1 :: shared_ptr - PullRequest
4 голосов
/ 01 июня 2010

У меня есть класс, в качестве члена которого используется 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 ]

6 голосов
/ 01 июня 2010

звоните .reset(new TCODBsp) или говорите bsp = std::tr1::shared_ptr(new TCODBsp). Общие указатели являются явными. Вы не можете просто назначить им тип ptr.

1 голос
/ 01 июня 2010

Нельзя назначить собственный указатель для общего указателя. Shared_ptr должен быть инициализирован с этим значением, или вы можете вызвать reset () со значением собственного указателя.

...