Here we go ...<br><br>Replace class by typename in <br><br><pre>template &lt; class TInputImage, class TOutputImage, class TForegroundConnectivity,<br>class TPriorityImage=TInputImage, class TInhibitImage=TInputImage, class TBackgroundConnectivity = class BackgroundConnectivity&lt;TForegroundConnectivity&gt;::Type &gt;<br>
class ITK_EXPORT UltimateSkeletonImageFilter : public ImageToImageFilter&lt; TInputImage, TOutputImage &gt;</pre><br>class TBackgroundConnectivity = typename BackgroundConnectivity&lt;TForegroundConnectivity&gt;::Type<br>
<br>Andreas<br><br><div class="gmail_quote">On Tue, Feb 2, 2010 at 8:07 PM,  <span dir="ltr">&lt;Neil.Burdett@csiro.au&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
 Hi guys,<br>
         I attach the header files for Connectivity.h and UltimateSkeletonImageFilter.h<br>
<br>
Thanks for taking the time<br>
<div class="im"><br>
Neil<br>
<br>
-----Original Message-----<br>
From: Bill Lorensen [mailto:<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>]<br>
</div><div><div></div><div class="h5">Sent: Wednesday, 3 February 2010 10:35 AM<br>
To: Andreas Schuh<br>
Cc: Burdett, Neil (ICT Centre, Herston - RBWH); <a href="mailto:insight-users@itk.org">insight-users@itk.org</a><br>
Subject: Re: [Insight-users] typedef name cannot follow class/struct/union<br>
<br>
It is hard to tell without seeing the rest of the code.<br>
<br>
For example, what is itk::Connectivity? Have you included all the proper files?<br>
<br>
Can you reproduce the error with a small compilable program that you can post?<br>
<br>
Bill<br>
<br>
On Tue, Feb 2, 2010 at 7:24 PM, Andreas Schuh<br>
&lt;<a href="mailto:andreas.schuh.84@googlemail.com">andreas.schuh.84@googlemail.com</a>&gt; wrote:<br>
&gt; Well, how does the declaration of itk::UltimateSkeletonImageFilter look<br>
&gt; like? Just the class declaration not all methods ...<br>
&gt;<br>
&gt; Andreas<br>
&gt;<br>
&gt; On Tue, Feb 2, 2010 at 7:07 PM, &lt;Neil.Burdett@csiro.au&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi Andreas;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; const int Dimension = 3;<br>
&gt;&gt;<br>
&gt;&gt; typedef unsigned short DistancePixelType;<br>
&gt;&gt;<br>
&gt;&gt; typedef itk::Image&lt; DistancePixelType, Dimension &gt; DistanceImageType;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Note that in the same file we have a number of other typedef that<br>
&gt;&gt; compile fine i.e.<br>
&gt;&gt;<br>
&gt;&gt; // Prepare the priority function<br>
&gt;&gt;<br>
&gt;&gt; typedef typename itk::DanielssonDistanceMapImageFilter&lt;TOutputImage,<br>
&gt;&gt; DistanceImageType&gt; DanielssonDistanceMapImageFilterType;<br>
&gt;&gt;<br>
&gt;&gt; typename DanielssonDistanceMapImageFilterType::Pointer<br>
&gt;&gt; danielssonDistanceMapFilter = DanielssonDistanceMapImageFilterType::New();<br>
&gt;&gt;<br>
&gt;&gt; ....<br>
&gt;&gt;<br>
&gt;&gt; // Compute a surfacic skeleton<br>
&gt;&gt;<br>
&gt;&gt; typedef typename itk::ParallelSkeletonImageFilter&lt;TOutputImage,<br>
&gt;&gt; TOutputImage, itk::Connectivity&lt;Dimension, 0&gt; &gt;<br>
&gt;&gt; ParallelSkeletonImageFilterType;<br>
&gt;&gt;<br>
&gt;&gt; typename ParallelSkeletonImageFilterType::Pointer parallelSkeletonFilter =<br>
&gt;&gt; ParallelSkeletonImageFilterType::New();<br>
&gt;&gt;<br>
&gt;&gt; ...<br>
&gt;&gt;<br>
&gt;&gt; // Delete all small components (extract the largest connected component in<br>
&gt;&gt; the image)<br>
&gt;&gt;<br>
&gt;&gt; typedef typename itk::LargestConnectedComponentImageFilter&lt;TOutputImage,<br>
&gt;&gt; TOutputImage&gt; LargestConnectedComponentImageFilterType;<br>
&gt;&gt;<br>
&gt;&gt; typename LargestConnectedComponentImageFilterType::Pointer<br>
&gt;&gt; largestConnectedComponentFilter =<br>
&gt;&gt; LargestConnectedComponentImageFilterType::New();<br>
&gt;&gt;<br>
&gt;&gt; etc...<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Maybe its an issue with itk::UltimateSkeletonImageFilter ??<br>
&gt;&gt;<br>
&gt;&gt; Neil<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; ________________________________<br>
&gt;&gt; From: Andreas Schuh [mailto:<a href="mailto:andreas.schuh.84@googlemail.com">andreas.schuh.84@googlemail.com</a>]<br>
&gt;&gt; Sent: Wednesday, 3 February 2010 9:41 AM<br>
&gt;&gt; To: Burdett, Neil (ICT Centre, Herston - RBWH)<br>
&gt;&gt; Subject: Re: [Insight-users] typedef name cannot follow class/struct/union<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt;<br>
&gt;&gt; How are TOutputImage, DistanceImageType and Dimension declared/defined?<br>
&gt;&gt; How is the template method/class itself declared?<br>
&gt;&gt;<br>
&gt;&gt; Andreas<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Feb 2, 2010 at 5:44 PM, &lt;Neil.Burdett@csiro.au&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi Andreas and Bill,<br>
&gt;&gt;&gt;                   Thanks for the replies. As mentioned in my previous<br>
&gt;&gt;&gt; post if I remove the &quot;typename&quot; I continue to get the same error:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; &quot;error C2242: typedef name cannot follow class/struct/union&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; You are correct that the second line after this is a cut and paste error<br>
&gt;&gt;&gt; so the actual code is:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  // Compute the seed image, by closing cavities and holes with an<br>
&gt;&gt;&gt; ultimate skeleton of the cuboid image<br>
&gt;&gt;&gt;  typedef itk::UltimateSkeletonImageFilter&lt;TOutputImage, TOutputImage,<br>
&gt;&gt;&gt; itk::Connectivity&lt;Dimension, 0&gt;, DistanceImageType &gt; SeedSkeletonFilterType;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  typename SeedSkeletonFilterType::Pointer seedSkeletonFilter =<br>
&gt;&gt;&gt; SeedSkeletonFilterType::New();<br>
&gt;&gt;&gt;  seedSkeletonFilter-&gt;SetInput(cuboidImage-&gt;GetOutput());<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  seedSkeletonFilter-&gt;SetPriorityImage(distanceInvertIntensityFilter-&gt;GetOutput());<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  seedSkeletonFilter-&gt;SetInhibitImage(parallelSkeletonFilter-&gt;GetOutput());<br>
&gt;&gt;&gt;  try{<br>
&gt;&gt;&gt;    seedSkeletonFilter-&gt;Update();<br>
&gt;&gt;&gt;  } catch(itk::ExceptionObject &amp;ex) {<br>
&gt;&gt;&gt;    throw itk::ExceptionObject(&quot;milxTopologicalHolesFilling&quot;, 0,<br>
&gt;&gt;&gt; std::string(&quot;Topological holes filling.. seed ultimate skeleton failed: &quot;) +<br>
&gt;&gt;&gt; ex.GetDescription());<br>
&gt;&gt;&gt;  }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Anymore ideas? This error occurs on both VS 2005 and VS 2008<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Cheers<br>
&gt;&gt;&gt; Neil<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -----Original Message-----<br>
&gt;&gt;&gt; From: Andreas Schuh [mailto:<a href="mailto:andreas.schuh.84@googlemail.com">andreas.schuh.84@googlemail.com</a>]<br>
&gt;&gt;&gt; Sent: Tuesday, 2 February 2010 2:49 PM<br>
&gt;&gt;&gt; To: Burdett, Neil (ICT Centre, Herston - RBWH)<br>
&gt;&gt;&gt; Cc: itk<br>
&gt;&gt;&gt; Subject: Re: [Insight-users] typedef name cannot follow<br>
&gt;&gt;&gt; class/struct/union<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi Neil,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Try<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; typedef  itk::UltimateSkeletonImageFilter&lt;TOutputImage, TOutputImage,<br>
&gt;&gt;&gt; itk::Connectivity&lt;Dimension, 0&gt;, DistanceImageType &gt; SeedSkeletonFilterType;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; There is no typename specified necessary here. Actually, I think it&#39;s<br>
&gt;&gt;&gt; wrong to use it.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The second line after this one in your mail might just be a<br>
&gt;&gt;&gt; copy-and-paste relict while you were composing the mail. Because it doesn&#39;t<br>
&gt;&gt;&gt; make sense at all ...<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The use of the second typename for the pointer type declaration is fine<br>
&gt;&gt;&gt; and for compilers like the VC6 also necessary.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Andreas<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Feb 1, 2010, at 11:20 PM, &lt;Neil.Burdett@csiro.au&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt; Hi Bill and Dan,<br>
&gt;&gt;&gt; &gt;        thanks for the reply, but removing typename, or replacing it<br>
&gt;&gt;&gt; &gt; with ITK_TYPENAME gives exactly the same error in visual studio 2008;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; &quot;error C2242: typedef name cannot follow class/struct/union&quot;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; The full extract of code I&#39;m using is;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;  // Compute the seed image, by closing cavities and holes with an<br>
&gt;&gt;&gt; &gt; ultimate skeleton of the cuboid image<br>
&gt;&gt;&gt; &gt;  typedef typename itk::UltimateSkeletonImageFilter&lt;TOutputImage,<br>
&gt;&gt;&gt; &gt; TOutputImage, itk::Connectivity&lt;Dimension, 0&gt;, DistanceImageType &gt;<br>
&gt;&gt;&gt; &gt; SeedSkeletonFilterType;<br>
&gt;&gt;&gt; &gt;  itk::UltimateSkeletonImageFilter&lt;TOutputImage, TOutputImage,<br>
&gt;&gt;&gt; &gt; itk::Connectivity&lt;Dimension, 0&gt;, DistanceImageType &gt; SeedSkeletonFilterType;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;  typename SeedSkeletonFilterType::Pointer seedSkeletonFilter =<br>
&gt;&gt;&gt; &gt; SeedSkeletonFilterType::New();<br>
&gt;&gt;&gt; &gt;  seedSkeletonFilter-&gt;SetInput(cuboidImage-&gt;GetOutput());<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;  seedSkeletonFilter-&gt;SetPriorityImage(distanceInvertIntensityFilter-&gt;GetOutput());<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;  seedSkeletonFilter-&gt;SetInhibitImage(parallelSkeletonFilter-&gt;GetOutput());<br>
&gt;&gt;&gt; &gt;  try{<br>
&gt;&gt;&gt; &gt;    seedSkeletonFilter-&gt;Update();<br>
&gt;&gt;&gt; &gt;  } catch(itk::ExceptionObject &amp;ex) {<br>
&gt;&gt;&gt; &gt;    throw itk::ExceptionObject(&quot;milxTopologicalHolesFilling&quot;, 0,<br>
&gt;&gt;&gt; &gt; std::string(&quot;Topological holes filling.. seed ultimate skeleton failed: &quot;) +<br>
&gt;&gt;&gt; &gt; ex.GetDescription());<br>
&gt;&gt;&gt; &gt;  }<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Neil<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; -----Original Message-----<br>
&gt;&gt;&gt; &gt; From: Bill Lorensen [mailto:<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>]<br>
&gt;&gt;&gt; &gt; Sent: Monday, 1 February 2010 11:46 PM<br>
&gt;&gt;&gt; &gt; To: Burdett, Neil (ICT Centre, Herston - RBWH)<br>
&gt;&gt;&gt; &gt; Cc: <a href="mailto:insight-users@itk.org">insight-users@itk.org</a><br>
&gt;&gt;&gt; &gt; Subject: Re: [Insight-users] typedef name cannot follow<br>
&gt;&gt;&gt; &gt; class/struct/union<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; I think the typename can be removed on both Windows and linux. My<br>
&gt;&gt;&gt; &gt; general rule for typename is that it is required if there are no<br>
&gt;&gt;&gt; &gt; template variables.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; For example<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; typedef Foo&lt;bar&gt; FooBarType;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; typedef typename Foo::Pointer FooPointer;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; On Sun, Jan 31, 2010 at 11:39 PM,  &lt;Neil.Burdett@csiro.au&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; Hi,<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;     I am currently porting an application from Ubuntu to windows. The<br>
&gt;&gt;&gt; &gt;&gt; line<br>
&gt;&gt;&gt; &gt;&gt; of code below compiles on Ubuntu but not on visual studio...<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;   typedef typename itk::UltimateSkeletonImageFilter&lt;TOutputImage,<br>
&gt;&gt;&gt; &gt;&gt; TOutputImage, itk::Connectivity&lt;Dimension, 0&gt;, DistanceImageType &gt;<br>
&gt;&gt;&gt; &gt;&gt; SeedSkeletonFilterType;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; I receive the error in visual studio 2008 &quot;error C2242: typedef name<br>
&gt;&gt;&gt; &gt;&gt; cannot<br>
&gt;&gt;&gt; &gt;&gt; follow class/struct/union&quot;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Any help would be appreciated.<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Neil<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; _____________________________________<br>
&gt;&gt;&gt; &gt;&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Visit other Kitware open-source projects at<br>
&gt;&gt;&gt; &gt;&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt;&gt; &gt;&gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt;&gt; &gt;&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt;&gt; &gt;&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt; _____________________________________<br>
&gt;&gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt;&gt; &gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt;&gt; &gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt;&gt; &gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; _____________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>