[Insight-developers] MedialNodeCorrespondencesTest, Intel C++
fixed
C. Aaron Cois
cacst11+ at pitt . edu
Fri, 15 Aug 2003 02:53:28 -0400
Ok, i found a fix for the .NET error, and i'll upload it tomorrow
morning. Hopefully it will still be compatible with the other
compilers. (i can't see any reqason why it wouldn't, it was just a weird
typedef thing)
-Aaron
Aaron Cois wrote:
> The fix inplemented for itkEllipsoidInteriorExteriorSpatialFunction
> causes errors in VS .NET. The errors are odd, and are remeniscent of
> arbitrary errors that would pop up from a missing brace of bracket,
> but I have found no such problem in the code. Can someone else with
> .NET verify? Just try to run anything that uses the class...the
> itkMedialNodeCorrespondenceTest should produce the errors. The errors
> are listed below
>
> -Aaron Cois
>
> f:\Projects\Insight\Code\Common\itkEllipsoidInteriorExteriorSpatialFunction.txx(112):
> error C2244:
> 'itk::EllipsoidInteriorExteriorSpatialFunction<,TInput>::SetOrientations'
> : unable to match function definition to an existing declaration
>
> f:\Projects\Insight\Code\Common\itkEllipsoidInteriorExteriorSpatialFunction.txx(114):
> error C2954: template definitions cannot nest
>
>
> Miller, James V (Research) wrote:
>
>> This was on the Intel C++ compiler on Linux, version 7.
>>
>>
>>
>>
>>> -----Original Message-----
>>> From: Bill Hoffman [mailto:bill . hoffman at kitware . com]
>>> Sent: Thursday, August 14, 2003 1:59 PM
>>> To: Miller, James V (Research); Insight-developers (E-mail)
>>> Subject: Re: [Insight-developers] MedialNodeCorrespondencesTest, Intel
>>> C++ fixed
>>>
>>>
>>> This change was made so that the fixed versions did not have the
>>> overhead
>>> of having the extra data associated with the non-fixed versions. (8
>>> bytes)
>>>
>>>
>>> From what I can tell, you are saying that the following crashes:
>>>
>>>
>>> #include <vnl/vnl_matrix.h>
>>> #include <vnl/vnl_matrix_fixed.h>
>>> void foo(vnl_matrix<double> m)
>>> {
>>> vnl_matrix<double> mm = m;
>>> }
>>>
>>> main()
>>> {
>>> vnl_matrix_fixed<double,3,3> m;
>>> foo(m);
>>> return 0;
>>> }
>>>
>>> Which intel compiler is this? Windows or Linux?
>>>
>>> It is using this operator:
>>>
>>> //: Cheap conversion to vnl_matrix_ref
>>> // Sometimes, such as with templated functions, the compiler cannot
>>> // use this user-defined conversion. For those cases, use the
>>> // explicit as_ref() method instead.
>>> operator const vnl_matrix_ref<T>() const { return
>>> vnl_matrix_ref<T>( num_rows, num_cols, const_cast<T*>(data_block())
>>> ); }
>>>
>>> Sounds like a bug in the compiler. This is going to be hard to
>>> track down in all the
>>> code, and should work.
>>> If you let me know which intel compiler it is crashing on, I can
>>> take a look.
>>>
>>> -Bill
>>>
>>>
>>>
>>>
>>>> It looks like the vnl_matrix_fixed and vnl_matrix classes
>>>
>>> are no longer related via inheritence. Instead, there are some
>>> converter routines ( mat_fixed.as_ref() returns a vnl_matrix).
>>>
>>>> The Intel compiler builds were crashing on the deallocation
>>>
>>> of a vnl_matrix. Bill changed the code in Ellipsoid*SpatialFunction
>>> to take a reference to a vnl_matrix_fixed instead of taking a
>>> vnl_matrix by value. This clears up the problem on the Intel
>>> compiler. I am guessing the other systems are relying on some other
>>> type conversion operators that may be flawed on the Intel compiler.
>>>
>>>
>>>> Two things to look out for:
>>>>
>>>> 1. vnl_matrix and vnl_matrix_fixed mismatches.
>>>> 2. function that take matrix types by value as opposed to by
>>>
>>> reference.
>>>
>>>
>>
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers at itk . org
>> http://www . itk . org/mailman/listinfo/insight-developers
>>
>>
>
>
>
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk . org
> http://www . itk . org/mailman/listinfo/insight-developers