Hi Rudiger, When you call ProcessLine in this way, you must tell CINT the data type of the arguments via a cast before the hexadecimal address. You can see examples in $ROOTSYS/gpad/src/TPad.cxx, eg: gROOT->ProcessLine(Form("((TPad *)0x%lx)->CreateNewText(%d,%d,%d,%d);", gROOT->ProcessLine(Form("((TPad *)0x%lx)->CreateNewPave(%d,%d,%d,%d);", gROOT->ProcessLine(Form("((TPadView3D *)0x%lx)->PaintBeginModel();",(Long_t)fPadView3D) gROOT->ProcessLine(Form("((TPadView3D *)0x%lx)->PaintEnd();",(Long_t)fPadView3D)); gROOT->ProcessLine(Form("((TPadView3D *)0x%lx)->PaintScene();",(Long_t)fPadView3D)); On Thu, 12 Jun 2003, Rüdiger Berlich wrote: > Hi there, > > I'm trying to embed root into a C++ application in the following way: > In the constructor of a class I call > > myInterpreter = new TRint("ROOT population", NULL, NULL); > > myInterpreter is defined as TRint * in the same class. A function of that > class is then supposed to repeatedly execute root scripts like this : > > gROOT->ProcessLine(Form(".x > %s(%p,%d,%p)",rootScript.c_str(),values,size_this,&result),&error); > > "values" is a double array of size size_this, result is a double. I'm using > the following example script, it is stored in a file parabola.cc (the same > name is stored in the string "rootScript", see above). > > void parabola(double *values, int nValues, double *result) > { > int i; > > *result=0; > for(i=0; i<nValues; i++) > *result += values[i]*values[i]; > } > > Executing my application results in the following error message : > > [...] > CINT/ROOT C/C++ Interpreter version 5.15.74, Feb 2 2003 > Type ? for help. Commands must be C++ statements. > Enclose multiple statements between { }. > Error: Function parabola(0xbfffd8d0,2,0xbfffda38) is not defined in current > scope FILE: LINE:0 > Possible candidates are... > filename line:size busy function type and name > parabola.cc 1:8 0 public: void parabola(double* values,int > nValues,double* result); > [...] > > If I do the same directly in root, namely : > > root [0] double values[2]={2.,2.}; > root [1] double result; > root [2] int size_this = 2; > root [3] .x parabola.cc(values,size_this,&result); > root [4] cout << result << endl; > 8 > > I get back the correct result. > > Any help is appreciated ! > > Have a nice day, > Ruediger Berlich >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET