2010-06-01 5 views
4

J'ai une classe qui a TR1 :: shared_ptr en tant que membre, comme ceci:mal à affecter un TR1 :: shared_ptr

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

    void Bar(); 
} 

Dans la fonction membre barre, j'essaie de lui assigner comme ceci:

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

g ++ puis me donne cette erreur

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>&)

dans mon code, Foo est réellement yarl::mapGen::MapGenerator. Qu'est-ce que je fais mal?

Répondre

6

appelez .reset(new TCODBsp) ou dites bsp = std::tr1::shared_ptr(new TCODBsp). Les pointeurs partagés sont explicites. Vous ne pouvez pas simplement leur attribuer le type ptr.

+0

Je vois. Merci de votre aide. – Max

1

Vous ne pouvez pas affecter un pointeur natif à un pointeur partagé. Shared_ptr doit être initialisé avec cette valeur, ou vous pouvez appeler reset() avec la valeur du pointeur natif.