Dear Jonathan, Thank you for reporting this problem. I'll fix this in cint5.14.9. The bug came in sinse 5.14.2. Fix is very easy. In src/parse.c or src/CINT_parse.c line 468, #ifndef G__OLDIMPLEMENTATION1083 - && (G__func_now>=0 || G__def_struct_member) + && (G__func_now>=0 || 0==G__def_struct_member) #else Masaharu Goto ================================================== Consider the following code: ======================= begin code snippet =================================== // file: test.cpp static const char *default_string = "default"; class foo { public: foo(); protected: const char *str; }; foo::foo() : str(default_string) { printf("foo::foo() : default_string = \"%s\", " "str = \"%s\"\n",default_string,str); if (str == NULL) printf("str = NULL\n"); } void test() { foo * pFoo = new foo(); } ======================= end code snippet =================================== Output from root 2.22/09 under WinNT 4.0 (SP5) is: ==================== Begin Root Output ======================= C:\Root>root test.cpp the current keyboard layout is 437 Warning in <TClass::TClass>: no dictionary for class TWinNTSystem is available Warning in <TWinNTSystem::SetProgname>: Wrong Program path ******************************************* * * * W E L C O M E to R O O T * * * * Version 2.22/09 13 July 1999 * * * * You are welcome to visit our Web site * * http://root.cern.ch * * * ******************************************* CINT/ROOT C/C++ Interpreter version 5.14.8, Jul 4 1999 Type ? for help. Commands must be C++ statements. Enclose multiple statements between { }. Welcome to the ROOT tutorials Type ".x demos.C" to get a toolbar from which to execute the demos Type ".x demoshelp.C" to see the help window root [0] foo::foo() : default_string = "default" str = NULL root [1] ==================== End Root Output ======================= Somehow, the constructor for foo is improperly failing to initialize the member variable foo::str. This breaks code that worked for many previous releases of root/cint. I can work around by rewriting my constructors to use assignments in the function body rather than calling constructors for member data items, but this will mean rewriting a lot of my class library. It also represents a significant change in the CINT behavior, so I would respectfully suggest that it represents a bug. Do the warning messages at the top of the root output suggest a problem? Regards, Jonathan =========================================================================== Jonathan M. Gilligan <jonathan.gilligan@vanderbilt.edu> Research Assistant Professor of Physics (615) 343-6252 Dept. of Physics and Astronomy, Box 1807-B Fax: 343-7263 6823 Stevenson Center Vanderbilt University, Nashville, TN 37235 Dep't Office: 322-2828
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:35 MET