Hi Nicolas, CINT does not support passing by reference a XXXX** argument. You can do: root [0] .L test.C root [1] TH2D** pifs[3] root [2] test(pifs,3) with //test.C void test(TH2D** h,int n){ //h=new TH2D*[n]; char name[10]; for (int i=0;i<n;i++){ sprintf(name,"h%d",i); h[i] = new TH2D(name,"bla",128,0,128,128,0,128); } } Masa, I remember a similar question a few weeks ago. Do you have any plans to support this? Rene Brun Nicolas Produit wrote: > > Hi, > > I have a code that work when compiled but not when interpreted, > here is the relevant part: > > in test.C: > void test(TH2D** &h,int n){ > h=new (TH2D*)[n]; > for (int i=0;i<n;i++){ > char name[10]; > sprintf(name,"h%d",i); > h[i] = new TH2D(name,"bla",128,0,128,128,0,128); > } > } > isdcpc3:~/investigate 102> root > ******************************************* > * * > * W E L C O M E to R O O T * > * * > * Version 3.04/02 5 March 2003 * > * * > * You are welcome to visit our Web site * > * http://root.cern.ch * > * * > ******************************************* > > Compiled for linux with thread support. > > CINT/ROOT C/C++ Interpreter version 5.15.68, Dec 12 2002 > Type ? for help. Commands must be C++ statements. > Enclose multiple statements between { }. > root [0] .L test.C > root [1] TH2D** pifs; > root [2] test(pifs,3); > Error: Symbol TH2D is not defined in current scope FILE:test.C LINE:2 > Syntax Error: TH2D* FILE:test.C LINE:2 > Error: memory allocation for (TH2D*) size=4 pinc=3 > FILE:/home/isdc/produit/investigate/./test.C LINE:2 > Warning: Automatic variable h allocated in global scope FILE:test.C LINE:2 > Error: Undeclared variable h FILE:test.C LINE:2 > *** Interpreter error recovered *** > root [3] > > Then I try: > in test.C: > void test(TH2D** &h,int n){ > h=new TH2D*[n]; > for (int i=0;i<n;i++){ > char name[10]; > sprintf(name,"h%d",i); > h[i] = new TH2D(name,"bla",128,0,128,128,0,128); > } > } > > isdcpc3:~/investigate 103> root > ******************************************* > * * > * W E L C O M E to R O O T * > * * > * Version 3.04/02 5 March 2003 * > * * > * You are welcome to visit our Web site * > * http://root.cern.ch * > * * > ******************************************* > > Compiled for linux with thread support. > > CINT/ROOT C/C++ Interpreter version 5.15.68, Dec 12 2002 > Type ? for help. Commands must be C++ statements. > Enclose multiple statements between { }. > root [0] .L test.C > root [1] TH2D** pifs; > root [2] test(pifs,3); > Error: Symbol i is not defined in current scope FILE:test.C LINE:3 > > *** Break *** segmentation violation > Generating stack trace... > > *** Break *** keyboard interrupt FILE:test.C LINE:3 > > *** Break *** keyboard interrupt > Root > > > an then I have to kill the terminal... > > -- > Nicolas Produit > INTEGRAL Science Data Center Phone: +41 22 950 91 40 > 16, Chemin d'Ecogia Fax: +41 22 950 91 33 > CH-1290 Versoix www: http://isdc.unige.ch/
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET