try use boost::noncopyable to B or implemente a copy constructor in B
without call A copy contructor.
BR
On Tue, Dec 2, 2008 at 11:03 AM, Mihail Konstantinov
<[EMAIL PROTECTED]> wrote:
>> Stefan Seefeld wrote:
>
>>
>> In this case you want to tell Python that your object is non-copyable:
>
> I followed your suggestion and still get the same error message:
> boost.cpp:6: error: 'A::A(const A&)' is private
> (full bjam output is appended to this email)
>
> Could you check this modified code? boost_ext.cpp:
> #include <boost/python.hpp>
> using namespace boost::python;
>
> class A{
> private:
> A(const A&){}; //no public copy constructor
> public:
> A(){};
> };
>
> class B: public A{
> public:
> B(){};
> };
>
> BOOST_PYTHON_MODULE(boost_ext)
> {
> class_<A,boost::noncopyable> a("A",init<>());
> class_<B, bases<A> >("B",init<>());
> }
>
> Thank you
> Mihail
>
> Compilation output:
>
> $bjam boost_ext
> ...patience...
> ...found 1202 targets...
> ...updating 2 targets...
> gcc.compile.c++ bin/gcc-4.1.2/debug/boost.o
> boost.cpp: In copy constructor 'B::B(const B&)':
> boost.cpp:11: instantiated from
> 'boost::python::objects::value_holder<Value>::value_holder(PyObject*, A0)
> [with A0 = boost::reference_wrapper<const B>, Value = B]'
> /home/mihail/temporary/boost_1_37_0/boost/python/object/make_instance.hpp:68:
> instantiated from 'static Holder* boost::python::objects::make_instance<T,
> Holder>::construct(void*, PyObject*, boost::reference_wrapper<const T>) [with
> T = B, Holder = boost::python::objects::value_holder<B>]'
> /home/mihail/temporary/boost_1_37_0/boost/python/object/make_instance.hpp:42:
> instantiated from 'static PyObject*
> boost::python::objects::make_instance_impl<T, Holder, Derived>::execute(Arg&)
> [with Arg = const boost::reference_wrapper<const B>, T = B, Holder =
> boost::python::objects::value_holder<B>, Derived =
> boost::python::objects::make_instance<B,
> boost::python::objects::value_holder<B> >]'
> /home/mihail/temporary/boost_1_37_0/boost/python/object/class_wrapper.hpp:29:
> instantiated from 'static PyObject*
> boost::python::objects::class_cref_wrapper<Src, MakeInstance>::convert(const
> Src&) [with Src = B, MakeInstance = boost::python::objects::make_instance<B,
> boost::python::objects::value_holder<B> >]'
> /home/mihail/temporary/boost_1_37_0/boost/python/converter/as_to_python_function.hpp:27:
> instantiated from 'static PyObject*
> boost::python::converter::as_to_python_function<T, ToPython>::convert(const
> void*) [with T = B, ToPython = boost::python::objects::class_cref_wrapper<B,
> boost::python::objects::make_instance<B,
> boost::python::objects::value_holder<B> > >]'
> /home/mihail/temporary/boost_1_37_0/boost/python/to_python_converter.hpp:87:
> instantiated from 'boost::python::to_python_converter<T, Conversion,
> has_get_pytype>::to_python_converter() [with T = B, Conversion =
> boost::python::objects::class_cref_wrapper<B,
> boost::python::objects::make_instance<B,
> boost::python::objects::value_holder<B> > >, bool has_get_pytype = true]'
> /home/mihail/temporary/boost_1_37_0/boost/python/object/class_wrapper.hpp:26:
> instantiated from 'static void boost::python::objects::class_metadata<T,
> X1, X2, X3>::maybe_register_class_to_python(T2*, mpl_::false_) [with T2 = B,
> T = B, X1 = boost::python::bases<A, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_>, X2 = boost::python::detail::not_specified, X3 =
> boost::python::detail::not_specified]'
> /home/mihail/temporary/boost_1_37_0/boost/python/object/class_metadata.hpp:229:
> instantiated from 'static void boost::python::objects::class_metadata<T,
> X1, X2, X3>::register_aux2(T2*, Callback) [with T2 = B, Callback =
> boost::integral_constant<bool, false>, T = B, X1 = boost::python::bases<A,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_>, X2 =
> boost::python::detail::not_specified, X3 =
> boost::python::detail::not_specified]'
> /home/mihail/temporary/boost_1_37_0/boost/python/object/class_metadata.hpp:219:
> instantiated from 'static void boost::python::objects::class_metadata<T,
> X1, X2, X3>::register_aux(void*) [with T = B, X1 = boost::python::bases<A,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_>, X2 =
> boost::python::detail::not_specified, X3 =
> boost::python::detail::not_specified]'
> /home/mihail/temporary/boost_1_37_0/boost/python/object/class_metadata.hpp:205:
> instantiated from 'static void boost::python::objects::class_metadata<T,
> X1, X2, X3>::register_() [with T = B, X1 = boost::python::bases<A,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_>, X2 =
> boost::python::detail::not_specified, X3 =
> boost::python::detail::not_specified]'
> /home/mihail/temporary/boost_1_37_0/boost/python/class.hpp:496:
> instantiated from 'void boost::python::class_<T, X1, X2,
> X3>::initialize(const DefVisitor&) [with DefVisitor =
> boost::python::init_base<boost::python::init<mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_> >, W = B, X1 = boost::python::bases<A, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_>, X2 = boost::python::detail::not_specified, X3 =
> boost::python::detail::not_specified]'
> /home/mihail/temporary/boost_1_37_0/boost/python/class.hpp:208:
> instantiated from 'boost::python::class_<T, X1, X2, X3>::class_(const char*,
> const boost::python::init_base<DerivedT>&) [with DerivedT =
> boost::python::init<mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_>, W = B, X1 =
> boost::python::bases<A, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_,
> mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_>, X2 =
> boost::python::detail::not_specified, X3 =
> boost::python::detail::not_specified]'
> boost.cpp:19: instantiated from here
> boost.cpp:6: error: 'A::A(const A&)' is private
> boost.cpp:11: error: within this context
> /home/mihail/temporary/boost_1_37_0/boost/python/object/value_holder.hpp: In
> constructor
> 'boost::python::objects::value_holder<Value>::value_holder(PyObject*, A0)
> [with A0 = boost::reference_wrapper<const B>, Value = B]':
> /home/mihail/temporary/boost_1_37_0/boost/python/object/value_holder.hpp:134:
> note: synthesized method 'B::B(const B&)' first required here
>
> "g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -g -fPIC
> -I"/home/mihail/temporary/boost_1_37_0" -I"/usr/include/python2.5" -c -o
> "bin/gcc-4.1.2/debug/boost.o" "boost.cpp"
>
> ...failed gcc.compile.c++ bin/gcc-4.1.2/debug/boost.o....
> ...skipped <pbin/gcc-4.1.2/debug>boost_ext.so for lack of
> <pbin/gcc-4.1..2/debug>boost.o...
> ...failed updating 1 target...
> ...skipped 1 target....
>
>
>
>
>
> _______________________________________________
> Cplusplus-sig mailing list
> [email protected]
> http://mail.python.org/mailman/listinfo/cplusplus-sig
--
Renato Araujo Oliveira Filho
_______________________________________________
Cplusplus-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig