i have a class that has this function:
typedef boost::shared_ptr sp_PrimShapeBase; class Control{ public: //other function
That's because i is an iterator. Dereferencing it once gives you the smart pointer, you need to double dereference it.
i
(**i).RenderShape(destination);
or
(*i)->RenderShape(destination);