Hi Matthew,
I fixed this problem and the CVS repository will be updated shortly.
Thanks for your report.
Cheers,
Philippe.
-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Matthew Palmer
Sent: Tuesday, January 15, 2002 8:13 AM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] TClass::GetMethod
There appears to be a problem with TClass::GetMethod when used with
interpreted classes.
It does not return the methods correctly. (says they can't be found). This
example code shows the problem:
include <iostream.h>
class Test {
public:
Test() {}
double RunMe();
};
double RunMe() {
return 5.0;
}
void MethodTest() {
TClass* c = gROOT->GetClass("Test");
void* im = gInterpreter->GetInterfaceMethod(c, "RunMe", "");
TList* l = c->GetListOfMethods();
TMethod* m2 = (TMethod*)l->FindObject("RunMe");
void* im2 = m2->InterfaceMethod();
cout << m2 << "\t" << m2.GetName() << endl;
cout << im << "\t" << im2 << endl;
TMethod* m1 = c->GetMethod("RunMe", ""); //Fails because im2 is null when
it shouldn't be
}
The two pointers to InterfaceMethods should be the same, but the second
method for getting it doesn't work even tho the TMethod is a valid object.
I think the problem lies in TCint::CreateListOfMethods(TClass*). I'm not
entirely sure but I think it might be because TCint::CreateListOfMethods
uses the G__MethodInfo copy constructor, but there is no explicit copy
constructor for G__MethodInfo....perhaps this is a problem with CInt...
Anyhow, this is quite an annoying problem as it prevents the use of
interpreted class member functions in Draw commands. I hope the above is
enough info...
Thanks
Matt
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:38 MET