I suspect that 2 out of 3 problems you reported are due to you are using Microsoft "dialect" of C++ and are not related to CINT. I tried to compile your example with KAI compiler (the compiler which input language is the closest one to ANSI C++) and got the following diagnostics: -------------------------------------------------------------------------------- /data35/upgrade/murat/run1>KCC -c --strict test1.cc "test1.cc", line 59: error: nonstandard form for taking the address of a member function b.sqr(ff,foo::f,2.0); // CINT does not understand foo::f (ptr to member ^ "test1.cc", line 61: error: nonstandard form for taking the address of a member function b.sqr(ff,foo::g,2.0); // CINT does not understand foo::g ^ 2 errors detected in the compilation of "test1.cc". -------------------------------------------------------------------------------- Regards, Pasha. Jonathan M. Gilligan writes: > I need to have a function that accesses an arbitrary member function of a > class through a pointer (I need to integrate member functions and don't > want to write a separate integration routine for each function that I want > to integrate. I can't use the TF1::Integrate because the functions I need > to integrate are pure virtual member functions of an abstract base class. > The ARM indicates that the right way to go with this in standard C++ is to > use the pointer-to-member operators .* and ->* (ARM section 5.5). However, > CINT does not seem to implement these operators (see test program below). > > I would like to request that a future release implement these operators and > to ask whether there is a workaround. Can I call a member function of a > class through a pointer in CINT? > > The following program runs perfectly under my regular C++ compiler (M'Soft > VC++ 5.0 SP3). However under Root's CINT I get these error messages: > > Error: No symbol foo::f in current scope FILE:boo.cpp LINE:56 > Error: class,struct,union or type fu.*fn not defined FILE:boo.cpp LINE:47 > Error: No symbol foo::g in current scope FILE:boo.cpp LINE:57 > Error: class,struct,union or type fu.*fn not defined FILE:boo.cpp LINE:47 > > //====================== boo.cpp ======================== > class foo > { > private: > public: > foo(); > ~foo(); > virtual double f(double x) const; > virtual double g(double x) const; > }; > > class bar > { > public: > bar(); > ~bar(); > double sqr(const foo& fu, double (foo::*fn)(double) const, double x) const; > }; > > foo::foo() > { > } > > foo::~foo() > { > } > > double foo::f(double x) const > { > return x + 1.0; > } > > double foo::g(double x) const > { > return 2.0 * x; > } > > bar::bar() > { > } > > bar::~bar() > { > } > > double bar::sqr(const foo& fu, double (foo::*fn)(double) const, double x) > const > { > double y = (fu.*fn)(x); // CINT does not seem to understand the .* > operator here > return y * y; > } > > void boo () > { > bar b; > foo ff; > > b.sqr(ff,foo::f,2.0); // CINT does not understand foo::f (ptr to member > function) > b.sqr(ff,foo::g,2.0); // CINT does not understand foo::g > } > //===================================== end of boo.cpp > ================================= > =========================================================================== > Jonathan M. Gilligan <jonathan.gilligan@vanderbilt.edu> > Research Assistant Professor and Associate Director (615) 343-2957 > Center for Molecular and Atomic Studies at Surfaces Fax: 343-1708 > Dept. of Physics and Astronomy, Box 1807-B Sec'y 322-6438 > Vanderbilt University, Nashville, TN 37235 Lab: 343-7578
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:35 MET