Hi,
The syntax:
double (*pp)[2];//[size]
is not supported.
Instead use:
double *pp[2];//[size]
This does means an invertion on the indexes.
You initalization loops becomes:
for(int j=0;j<data->size;j++) {
data->p[j] = j*10.+i;
data->pp[0][j] = j*10.+i;
data->pp[1][j] = j*10.+i+1;
}
Cheers,
Philippe.
-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Hajime Nanjyo
Sent: Thursday, July 24, 2003 4:11 PM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] variable 2-dim array in a class for root I/O
Dear Rooters,
I would like to use a 2-dim. array of variable size
within a class which is used for ROOT I/O.
Some simple codes are listed below to show what I want to do.
(A 2-dim. array is declared in MyClass.h.)
These codes were compiled successfully and the application
run without error. But the 2-dim. array was not stored
in the ROOT file.
I'm afraid the expression, "double (*pp)[2];//[size]" ,
is not supported.
Could you tell me how to do ?
Best Regards,
Hajime
////////////////////////////////
g++ `root-config --cflags` -c MyClass.C
rootcint -f MyClssDict.C -c MyClass.h MyClassLinkDef.h
g++ `root-config --cflags` -c MyClassDict.C
g++ -shared -O MyClass.o MyClassDict.o -o libMyClass.so
g++ `root-config --cflags` -c write.C
g++ write.o libMyClass.so `root-config --libs` -o write
./write
////////////////////////////////
// MyClass.h
#ifndef MyClass_HH
#define MyClass_HH
#include "TObject.h"
class MyClass: public TObject
{
public:
MyClass();
~MyClass();
void Init(int s);
void Fin();
public:
int size;
double *p;//[size]
double (*pp)[2];//[size]
// ^^^^^^^^^^^^^^^^
// such kind of expression is supported?
ClassDef(MyClass,1) //MyClass
};
#endif
////////////////////////////////
// MyClass.C
#include "MyClass.h"
#if !defined(__CINT__)
ClassImp(MyClass);
#endif
MyClass::MyClass() {
size=0;
p=0;
pp=0;
}
MyClass::~MyClass() {
;
}
void MyClass::Init(int s) {
size=s;
p = new double[s];
pp = new double[s][2];
}
void MyClass::Fin() {
delete [] p;
delete [] pp;
p=0;
pp=0;
size=0;
}
////////////////////////////////
// MyClassLinkDef.h
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class MyClass+;
#endif
////////////////////////////////
// write.C
#include "TApplication.h"
#include "TFile.h"
#include "TTree.h"
#include "MyClass.h"
int main(int argc,char** argv)
{
TApplication app("app", &argc, argv);
TFile *tf = new TFile("tmp.root","RECREATE");
TTree *tree = new TTree("tree","tmp");
MyClass *data = new MyClass();
tree->Branch("data","MyClass",&data);
for (int i=0;i<5;++i) {
data->Init(i+1);
for(int j=0;j<data->size;j++) {
data->p[j] = j*10.+i;
data->pp[j][0] = j*10.+i;
data->pp[j][1] = j*10.+i+1;
}
tree->Fill();
data->Fin();
}
tf->Write();
delete data;
return 0;
}
////////////////////////////////
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:14 MET