Hi Tommaso, A quick and brief answer to your mail for your point about TGraph input, I suggest you use the TGraph function able to read automatically two columns from a file: TGraph(const char *filename, const char *format="%lg %lg", Option_t *option=""); for your second point, I recommend the use of a hihger level object such as TMatrixD instead of using bare C++ pointers. Rene Brun On Thu, 22 Aug 2002, Tommaso Chiarusi wrote: > Dear rooters, > I have found this strange behaviour (naturally from my point of view) > concerning the way cint treats the trasmission of an array of pointers > with respect to what the g++ compiler does. > > I have written the simple function "ReadFile" that reads one text > datafile (with data organized in columns, each of the same lengths!) > without caring about its actual length, > retrieving its columns in as many as double arrays, ready to be used for > example with a TGraph. > > As input I need to give only the input filename "fin", the number of > columns "ncolumns", an array of pointers "var" dimensioned by the same > number of the columns, and in the end a initially empty variable for the > lenght of each column "nrows". > > as an example: > > ifstream fin("file_1.dat"); > int ncolumns = 5; > double **var = new double*[ncolumns]; > int nrows=0; > > > At this point I need to call my function, which is > > MyClass::ReadFile(ncolumns,fin,*var,nrows); > ^^^^ > in case of implementation of the function as a method of a class (in my > case is a class obtained with MakeClass upon a file.root); > > while is > > ReadFile(ncolumns,fin,var,nrows); > ^^^ > if I use a non root C++ program, compiled with g++ v. 2.96, where the > function is set before the main(). > > The ^^^^ should point to the difference. > > > the definition of the function is as the same as in both the cases, i.e. > > > void ReadFile( int& ncolumns, ifstream& file, double** &var, int& nrows) > { > double x = 0; > vector<double> *v = new vector<double>[ncolumns]; > > while(!file.eof()) > { > for(int i=0; i<ncolumns;i++) > { > file>>x; > v[i].push_back(x); > } > } > > nrows = v[0].size()-1; > > double *ar; > > for(int j=0;j<ncolumns;j++) > { > ar = new double[nrows]; > for(int k=0;k<nrows;k++) > { > ar[k]=v[j][k]; > } > > var[j]=ar; > } > > > } > > If I take care to use such different notation "*var" or "var" > according to cint or g++ I get no problem, and everyone is happy. > But if I use with cint the notation valid for g++ I get an error. > > So , what do I ignore about C++? > Is this normal? > > > Cheers, Tommaso > > Further, in the cint case, if I give the same call as in the program I get >
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:05 MET