[ROOT] passing a TH2D** &

From: Nicolas Produit (Nicolas.Produit@obs.unige.ch)
Date: Tue Apr 15 2003 - 10:01:27 MEST


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