[PyQt] SIP Error with a %MethodCode
Phil Thompson
phil at riverbankcomputing.com
Sun Mar 17 10:02:09 GMT 2013
On Sun, 17 Mar 2013 10:10:00 +0100, Vincent Vande Vyvre
<vincent.vandevyvre at swing.be> wrote:
> Hi,
>
> I have, in C++, a method wich return an array of double and I've set a
> MethodCode in the .sip file to convert the array to a Python list of
int.
>
> The array in the C++ code:
>
> ---------------------------------
> double lr[256];
>
> for (int i = 0 ; i < 256 ; i++)
> {
> float val = cvRound(b_hist.at<float>(i));
> lr[i] = val;
> }
>
> return *lr;
> ---------------------------------
>
> The .sip file:
>
> -----------------------------------------
> %Module histogram
>
> class Histogram {
>
> %TypeHeaderCode
> #include <histogram.h>
> %End
>
>
> public:
> int loadImage(char*) ;
> double getHistogram() ;
> %MethodCode
> PyObject *l ;
> int size = 256 ;
> // Create the Python list of the correct length.
> if ((l = PyList_New(size)) == NULL)
> return NULL;
>
> // Go through each element in the C++ instance and convert it to a
> // wrapped object.
> for (int i = 0; i < size; ++i)
> {
> // Add the wrapper to the list.
> PyList_SET_ITEM(l, i, PyFloat_FromDouble(sipCpp -> at(i)));
> }
>
> return l;
> %End
> };
> ---------------------------------------
>
> The error when I execute make:
>
> vincent at djoliba:~/oqapy-2/C++/exemples/2$ make
> g++ -c -O2 -g -fPIC -Wall -W -DNDEBUG -I. -I/usr/include/python2.7 -o
> siphistogramcmodule.o siphistogramcmodule.cpp
> g++ -c -O2 -g -fPIC -Wall -W -DNDEBUG -I. -I/usr/include/python2.7 -o
> siphistogramHistogram.o siphistogramHistogram.cpp
> histogram.sip: In function ‘PyObject*
> meth_Histogram_getHistogram(PyObject*, PyObject*)’:
> histogram.sip:28:9: erreur: ‘class Histogram’ has no member named ‘at’
> make: *** [siphistogramHistogram.o] Erreur 1
>
> In this context, what represent 'sipCpp'? The returned value ?
You code just implements a type convertor - %MethodCode does more than
that.
See...
http://pyqt.sourceforge.net/Docs/sip4/directives.html#directive-%MethodCode
sipCpp is "this", the Histogram instance.
You've defined getHistogram() as returning a double, but you say it
returns an array of doubles.
You haven't called Histogram::getHistogram().
You have included "return" statements which you must not do.
Phil
More information about the PyQt
mailing list