Dear Nicolas, Thank you for reporting this problem. As I tried your macro with the latest version(5.14.28), it worked without problem. Probably, this is fixed between 5.14.21 and 28. Thank you Masharu Goto > >Hi, >are there restriction in using overloaded operator () in CINT? >Following code run if compiled with g++ > >isdcpc3:~/mem 201> root > ******************************************* > * * > * W E L C O M E to R O O T * > * * > * Version 2.23/08 2 November 1999 * > * * > * You are welcome to visit our Web site * > * http://root.cern.ch * > * * > ******************************************* > >FreeType Engine v1.1 used to render TrueType fonts. > >CINT/ROOT C/C++ Interpreter version 5.14.21, Oct 22 1999 >Type ? for help. Commands must be C++ statements. >Enclose multiple statements between { }. >root [0] .L minimal.cc >root [1] Mask m(1,2,1.0) >root [2] m.show() >Mask 1 2 > 01 > __ >Error: Can't call Mask::operator()(i,j) in current scope FILE:minimal.cc >LINE:75 >Possible candidates are... >filename line:size busy function type and name (in Mask) >filename line:size busy function type and name (in Matrix) >Error: Binary operator oprand missing FILE:minimal.cc LINE:75 >0|*** Interpreter error recovered *** > >Here is the code for minimal.cc: > >#include <iostream.h> >#include <assert.h> >class Matrix >{ > protected: > int fX_dim; //x dimention of the matrix left argument in a(i,j) > int fY_dim; //y dimention of the matrix right argument in a(i,j) > double * fAdr; //the matrix itself > public: > Matrix(){ > fX_dim=0; > fY_dim=0; > fAdr=NULL; > } > Matrix(int x, int y, double z) { > fX_dim=x; > fY_dim=y; > fAdr = new double [fX_dim*fY_dim]; > for (int i=0;i<fX_dim*fY_dim;i++){ > fAdr[i]=z; > } > } > Matrix(const Matrix & old){ > fX_dim=old.fX_dim; > fY_dim=old.fY_dim; > fAdr = new double [fX_dim*fY_dim]; > for (int i=0;i<fX_dim*fY_dim;i++){ > fAdr[i]=old.fAdr[i]; > } > } > ~Matrix(){ > delete [] fAdr; > } > Matrix & operator = (const Matrix & old){ > if (this != &old){ > delete [] fAdr; > fX_dim=old.fX_dim; > fY_dim=old.fY_dim; > fAdr = new double [fX_dim*fY_dim]; > for (int i=0;i<fX_dim*fY_dim;i++){ > fAdr[i]=old.fAdr[i]; > } > } > return *this; > } > > double operator() (int i, int j) const{ > assert(i>-1); > assert(i<fX_dim); > assert(j>-1); > assert(j<fY_dim); > return fAdr[i*fY_dim+j]; > } >}; > >class Mask : public Matrix { > public: > Mask(int i,int j,double a): Matrix(i,j,a){} > void show(double scale=1.0) const{ > char ch; > int k; > cout<<"Mask "<<fX_dim<<" "<<fY_dim<<"\n"; > cout<<" "; > for (int j=0;j<fY_dim;j++){ > cout<<j%10; > } > cout<<"\n "; > for (int j=0;j<fY_dim;j++){ > cout<<'_'; > } > cout<<"\n"; > for (int i=0;i<fX_dim;i++){ > cout<<i%10<<'|'; > for (int j=0;j<fY_dim;j++){ > k=int(10.0*(*this)(i,j)); > if (k==10.0){ > k=int(' ')-int('0'); > } > if (k==0.0){ > k=174-int('0'); > } > ch=char(int('0')+k); > cout<<ch; > } > cout<<"|"<<i%10<<"\n"; > } > cout<<" "; > for (int j=0;j<fY_dim;j++){ > cout<<'-'; > } > cout<<"\n"; > cout<<" "; > for (int j=0;j<fY_dim;j++){ > cout<<j%10; > } > cout<<"\n"; > } >}; > >#ifndef __CINT__ >main(){ > Mask m(1,2,1.0); > m.show(); >} > >#endif > > > >-- > Nicolas Produit
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:17 MET