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