[C++-sig] error in argument conversion
Stefan Seefeld
seefeld at sympatico.ca
Sun Jan 23 04:11:04 CET 2005
I'v run into a runtime error which I found no explanation for.
Here is what I'm doing in python:
>>> type(ptree)
<class 'PTree.List'>
>>> ptree.car()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
Boost.Python.ArgumentError: Python argument types in
List.car(List)
did not match C++ signature:
car(PTree::List*)
>>>
where 'PTree.List' is a python wrapper around my class, which I generate so:
Node *car(List *l) { return l->car();}
Node *cdr(List *l) { return l->cdr();}
BOOST_PYTHON_MODULE(PTree)
{
bpl::class_<Node, bpl::bases<>, Node *, boost::noncopyable> node("Node", bpl::no_init);
bpl::class_<List, bpl::bases<Node>, List *, boost::noncopyable> list("List", bpl::no_init);
list.def("car", car, bpl::return_value_policy<bpl::reference_existing_object>());
list.def("cdr", cdr, bpl::return_value_policy<bpl::reference_existing_object>());
...
I don't quite understand the text in the 'ArgumentError' exception.
It suggests the python type 'List' couldn't be converted to the C++ type 'PTree::List*'.
Is that interpretation correct ? If so, what possible reasons exist for the requested
conversion to fail, given the above definition of the wrapper class ?
Thanks,
Stefan
PS: the reason I expose raw pointers and use the above return value policy is
that these PTree classes all use a garbage collector library.
More information about the Cplusplus-sig
mailing list