> 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
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to