From: Riccardo L. <lattanzi@MIT.EDU> - 2005-04-11 22:09:44
|
Quoting Gehua Yang <ya...@rp...>: > The vnl_numeric_traits<mp_complex> specialization is missing. If you > take a look into vnl_numeric_traits.h, you will find out it is only a > dozen lines to add. Besides, you can copy from vnl_numeric_traits< > complex<double> >. I believe it won't take more than 10 minutes. > Hi, Thanks for your suggestion. I added the specialization on vnl_numeric_traits but that caused new error to arise. I did the vnl_numeric_traits<mp_complex> and vnl_numeric_traits<mp_real> adding the following to vnl_numeric_traits.h (AND NOTHING TO vnl_numeric_traits.cxx): class vnl_numeric_traits< mp_complex > { public: //: Additive identity static const mp_complex zero; //: Multiplicative identity static const mp_complex one; // Maximum value which this type can assume; makes no sense for this type //static const vcl_complex<double> maxval; //: Return value of abs() typedef mp_real abs_t; //: Name of a type twice as long as this one for accumulators and products. typedef mp_complex double_t; //: Name of type which results from multiplying this type with a double typedef mp_complex real_t; }; class vnl_numeric_traits< mp_real > { public: //: Additive identity static const mp_real zero; //: Multiplicative identity static const mp_real one; //: Maximum value which this type can assume static const mp_real maxval; //: Return value of abs() typedef mp_real abs_t; //: Name of a type twice as long as this one for accumulators and products. typedef mp_real double_t; //: Name of type which results from multiplying this type with a double typedef mp_real real_t; }; That seemed to work per se but lead to many errors when I re-built vnl. There are some member functions in vnl_matrix.txx (i.e. normalize_rows, normalize_columns, operator_one,_norm,....) that use some functions which are not templated and expect vcl_complex<double> (i.e. vnl_math_squared_magnitude, vnl_math_abs, vnl_matlab_isfinite,...). I tried to work around that commenting out the member functions of vnl_matrix which were causing problems (not very elegant, but if I can build at least I could try to write examples with vnl_matrix<mp_complex>). Using such "cheating" I got rid of most of the errors. The remaining ones are related to the file vnl_unary_function_h which I think doesn't work because it searches for the limits of mp_complex and mp_real in vcl_numeric_limits. (at the end of the email I'm attaching the error message) Is something I did wrong when adding the specialization on vnl_numeric_traits.h ? I don't think I'm ready to solve that problem without the guide of some Vxl devoloper. Can you please help me with this? Thanks a lot, Riccardo Lattanzi Error Message: --------------------Configuration: vnl - Win32 Release-------------------- Compiling... vnl_unary_function+double.vnl_vector+double--.cxx D:\Vxl\vxl-1.1.0\core\vnl/vnl_unary_function.txx(32) : warning C4003: not enough actual parameters for macro 'min' D:\Vxl\vxl-1.1.0\core\vnl/vnl_unary_function.txx(39) : warning C4003: not enough actual parameters for macro 'max' D:\Vxl\vxl-1.1.0\core\vnl/vnl_unary_function.txx(32) : error C2589: '(' : illegal token on right side of '::' C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xstring(583) : while compiling class-template member function 'double __thiscall vnl_unary_function<double,class vnl_vector<double> >::get_range_min(void) const' D:\Vxl\vxl-1.1.0\core\vnl/vnl_unary_function.txx(32) : error C2059: syntax error : '::' C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xstring(583) : while compiling class-template member function 'double __thiscall vnl_unary_function<double,class vnl_vector<double> >::get_range_min(void) const' D:\Vxl\vxl-1.1.0\core\vnl/vnl_unary_function.txx(39) : error C2589: '(' : illegal token on right side of '::' C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xstring(583) : while compiling class-template member function 'double __thiscall vnl_unary_function<double,class vnl_vector<double> >::get_range_max(void) const' D:\Vxl\vxl-1.1.0\core\vnl/vnl_unary_function.txx(39) : error C2059: syntax error : '::' C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xstring(583) : while compiling class-template member function 'double __thiscall vnl_unary_function<double,class vnl_vector<double> >::get_range_max(void) const' Error executing cl.exe. vnl.lib - 4 error(s), 2 warning(s) -- Riccardo Lattanzi Harvard-MIT Division of Health Science and Technology Laboratory for Biomedical Imaging Research Beth Israel Deaconess Medical Center Tel: (+1) 617 667 0281 Fax: (+1) 617 667 7917 |