<div>
<font face="Geneva">Hello,</font>
</div><div><font face="Geneva"><br></font></div><div><font face="Geneva">I'm getting a seg fault when trying to call a virtual method on a base class from python. Code is below:</font></div><div><font face="Geneva"><br></font></div><div><font face="Geneva"><div>#include <memory></div><div><br></div><div>namespace boost { </div><div> template<class T> const T* get_pointer(const std::shared_ptr<T>& ptr) </div><div> {</div><div> return ptr.get();</div><div> }</div><div><br></div><div> template<class T> T* get_pointer(std::shared_ptr<T>& ptr)</div><div> {</div><div> return ptr.get();</div><div> }</div><div>}</div><div><br></div><div>#include <Python.h></div><div>#include <boost/python.hpp></div><div><br></div><div>namespace bp = boost::python;</div><div><br></div><div>class MyBase</div><div>{</div><div>public:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>MyBase(){}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>virtual ~MyBase(){}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>virtual void baseTest() { printf("base test\n"); }</div><div>};</div><div><br></div><div>class MyDerived : public MyBase</div><div>{</div><div>public:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>MyDerived() {}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>virtual ~MyDerived(){}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>void derivedTest() { printf("derived test\n"); }</div><div>};</div><div><br></div><div>BOOST_PYTHON_MODULE(PythonTest)</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>bp::class_<MyBase, std::shared_ptr<MyBase>>("MyBase")</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>.def("baseTest", &MyBase::baseTest);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>bp::class_<MyDerived, bp::bases<MyBase>, std::shared_ptr<MyDerived>>("MyDerived")</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>.def("derivedTest", &MyDerived::derivedTest);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>bp::implicitly_convertible<std::shared_ptr<MyDerived>, std::shared_ptr<MyBase>>();</div><div>}</div><div><br></div><div>Does it have to do with using std::shared_ptr for storage? If so is there a way around this? Any help is appreciated. </div></font></div>
<div><div><br></div>-- <br>Gabe Rives-Corbett<br><div><br></div></div>