From: Michele J. <er...@jl...> - 2006-09-18 15:05:09
|
Michele Joyce wrote: > William S Fulton wrote: > >>Michele Joyce wrote: >> >> >>>My C++ header: >>> >>>#ifndef BUFFER_H >>>#define BUFFER_H >>> >>>// Define the base of a generic buffer. >>>class Buffer >>>{ public: >>> Buffer(unsigned c, unsigned s) : m_count(c), m_size(s) {} >>> const unsigned m_count; // Number of elements. >>> const unsigned m_size; // Buffer size in bytes. >>>}; >>> >>>// Define a data block for any number of elements of some data type. >>>template <typename Type> >>>class DataBlock: public Buffer >>>{ public: >>> DataBlock(unsigned); >>> ~DataBlock(void) { delete m_block; } >>> >>> private: >>> Type *m_block; >>>}; >>> >>> >>>// Construct a DataBlock object. >>>template <typename Type> >>>DataBlock<Type>::DataBlock(unsigned count): Buffer(count, count * >>>sizeof(Type)) >>>{ >>> m_block = new Type[count]; >>>} >>> >>>#endif >>> >>>My swig i file: >>> >>>/* File : example.i */ >>>%module linux_tcl >>>%{ >>># include "buffer.h" >>> >>>%} >>>%include "buffer.h"; >>>%include "std_vector.i"; >>> >>>namespace std { >>> %template(vectorb) vector<Buffer *>; >>>} >>>%template(DataBlockdouble) DataBlock<double>; >>>%template(DataBlockint) DataBlock<int>; >>>%template(DataBlockchar) DataBlock<char>; >>> >>> >>>My tcl file: >>>load ./linux_tcl_wrap.so linux_tcl >>> >>>#create a vector for my Buffer pointers >>>vectorb myBufferVector >>>#create a DataBlock<char> object, which inherits Buffer >>>DataBlockchar myCharData 100 >>>myBufferVector push myCharData >>> >>>ERROR: Type error: Expected _p_p_Buffer >>> >>> >>>I'm using swig-1.3.29 with tcl8.3 >>> >>>No matter how I try to push my DataBlock object into my Buffer Vector, I >>>get a type error. As a matter of fact, if I create a Buffer, and use it, >>>I also get a type error. >>>What am I missing? >>>Thanks in advance. >>>Michele >>> >>> >>> >>Your code works fine for me (swig-1.3.29 and tcl8.4.12). My generated >>push method is shown below. Note the SWIGTYPE_p_Buffer (yours might have >>SWIGTYPE_p_p_Buffer for some inexplicable reason). If yours is not the >>same, then you probably do not have a stock installation of SWIG or you >>are doing something other than what you have shown. >> >>William >> >> >> >>SWIGINTERN int >>_wrap_vectorb_push(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, >>int objc, Tcl_Obj *CONST objv[]) { >> std::vector<Buffer * > *arg1 = (std::vector<Buffer * > *) 0 ; >> Buffer **arg2 = 0 ; >> void *argp1 = 0 ; >> int res1 = 0 ; >> void *argp2 = 0 ; >> int res2 = 0 ; >> Buffer *temp2 ; >> >> if (SWIG_GetArgs(interp, objc, objv,"oo:vectorb_push self x ",(void >>*)0,(void *)0) == TCL_ERROR) SWIG_fail; >> res1 = SWIG_ConvertPtr(objv[1], >>&argp1,SWIGTYPE_p_std__vectorTBuffer_p_t, 0 | 0 ); >> if (!SWIG_IsOK(res1)) { >> SWIG_exception_fail(SWIG_ArgError(res1), "in method '" >>"vectorb_push" "', argument " "1"" of type '" "std::vector<Buffer * > >>*""'"); >> } >> arg1 = reinterpret_cast< std::vector<Buffer * > * >(argp1); >> res2 = SWIG_ConvertPtr(objv[2], &argp2, SWIGTYPE_p_Buffer, 0 | 0 ); >> if (!SWIG_IsOK(res2)) { >> SWIG_exception_fail(SWIG_ArgError(res2), "in method '" >>"vectorb_push" "', argument " "2"" of type '" "Buffer *""'"); >> } >> temp2 = reinterpret_cast< Buffer * >(argp2); >> arg2 = &temp2; >> (arg1)->push_back((Buffer *const &)*arg2); >> >> return TCL_OK; >>fail: >> return TCL_ERROR; >>} >> >> >> > Thanks. It looks like I thought I was running the most uptodate > version but wasn't. Things are good. > Michele > >------------------------------------------------------------------------ > >------------------------------------------------------------------------- >Using Tomcat but need to do more? Need to support web services, security? >Get stuff done quickly with pre-integrated technology to make your job easier >Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > >------------------------------------------------------------------------ > >_______________________________________________ >Swig-user mailing list >Swi...@li... >https://lists.sourceforge.net/lists/listinfo/swig-user > > Thanks to you, I am now able to add my DataBlock objects to the vector, but I'm unable to get the size of the vector. I get the error: list of Buffer * expected while executing "myBufferVector size" Michele |