[Insight-users] InsightApplications version must match version of Insight

Luis Ibanez luis.ibanez at kitware.com
Tue, 03 Feb 2004 15:15:51 -0500


Hi David,

According to the compiler error message, the
version of InsightToolkit that you are using
has the itkVTKImageExport filter templated
over a single parameter.


> itkImageToVTKImageFilter.h:61: error: 
wrong number of template arguments (2, should be 1)
>> > /usr/local/include/InsightToolkit/BasicFilters/itkVTKImageExport.h:52:
>> > error: provided
>> >    for `template<class TInputImage> class itk::VTKImageExport'




Please go to the directory

    /usr/local/include/InsightToolkit/BasicFilters

and open the file

    itkVTKImageExport.h

go to line 52, and if you find
the declaration of the class to be


    template <class TInputImage>
    class ITK_EXPORT VTKImageExport: public VTKImageExportBase


this means that you are using an Insight previous to december
12 2003. (and definitely not ITK 1.6).


Note the CVS log:
http://www.itk.org/cgi-bin/cvsweb.cgi/Insight/Code/BasicFilters/itkVTKImageExport.h.diff?r1=1.11&r2=1.12&cvsroot=Insight
when this modification was made.

The new declaration should look like


     template <class TInputImage, typename TVTKRealType=float>
     class ITK_EXPORT VTKImageExport: public VTKImageExportBase



NOTE THAT:
It looks like you are installing ITK in /usr/local


    I wonder if you updated the source tree,
    and rebuild ITK,... but forgot to do


                make install


    in order to update the files in /usr/local...




Please let us know what you find


Thanks,


    Luis



-------------------------
David Macias Verde wrote:

> Dear Luis:
> 
> I am not sure about the different version between InsightToolkit and
> InsightApplications. Actually, this morning I compiled both in the same
> release version 1.6.0. The compilation errors I sent to you came up with
> this new ITK. So I don't understand your answer. Could you tell me how I
> can see if your suggestion is right? Of course I think I am commiting
> some mistake, but I don't know where.
> 
> Of course I will change into cmake. 
> 
> Thanks again and I'm sorry for the inconvenience,
> 
> David Macias
> Hospital de Gran Canaria Dr. Negrin - Spain
> 
> 
> On Tue, 2004-02-03 at 18:14, Luis Ibanez wrote:
> 
>>Hi David,
>>
>>
>>You are mixing a recent version of "Insight"
>>with an older version of "InsightApplications"
>>
>>The filter itkVTKImageExport recently got an
>>extra template parameter in order to accomodate
>>for changes in the API of VTK - CVS.
>>
>>The changes were made also in InsightApplications
>>on January 16 2004.   Please synchronize your
>>checkouts.
>>
>>Easy options are:
>>
>>A) CVS update InsightApplications
>>
>>           OR
>>
>>B) Use ITK 1.6 for both Insight and InsightApplications.
>>
>>
>>
>>Remember that whenever you cvs update Insight you
>>must also cvs update InsightApplications.
>>
>>
>>
>>--------------
>>
>>Also, please don't use qmake.
>>
>>You can use CMake in order to build projects
>>involving Qt.
>>
>>Please look at the directories:
>>
>>      InsightApplications/QtITK
>>
>>and
>>
>>      InsightApplications/Auxiliary/QtImageViewer
>>
>>for examples on how to setup a CMakeLists.txt
>>project.
>>
>>
>>
>>Regards,
>>
>>
>>    Luis
>>
>>
>>------------------------------
>>David Macias Verde wrote:
>>
>>
>>>Thanks for your answer. I've worked hard with what you suggested but I
>>>don't get a solution. Maybe it's because I am new to all this things
>>>(VTK,ITK and Qt). I have some experience but not enough to get through
>>>this. 
>>>
>>>I am putting all the includes and libraries, although they are not
>>>needed to my project. The fact is that when I include the lines with
>>>ImageToVTKImageFilter, my code is not compiled. If they are deleted all
>>>is working fine. I do not know how to fix the error I have with
>>>ImageToVTKImageFilter.
>>>
>>>Here it is my project file. I am using qmake to do the Makefile, because
>>>I am working with Qt.
>>>
>>>-----------------------------------------------------------------------
>>>TEMPLATE	= app
>>>CONFIG		= qt warn_on release
>>>LIBS		= -L/usr/local/VTK-4.2.1/bin -lvtkCommon -lvtkFiltering
>>>-lvtkGraphics -lvtkHybrid -lvtkIO -lvtkImaging -lvtkParallel
>>>-lvtkPatented -lvtkRendering -lvtkjpeg -lvtkpng -lvtkzlib -lvtktiff
>>>LIBS += -L/usr/local/lib/InsightToolkit -lITKNumerics -lITKIO
>>>-lITKCommon -lVXLNumerics -litkpng -litkzlib -lITKMetaIO
>>>-lITKDICOMParser 
>>>INCLUDEPATH  = /usr/local/VTK-4.2.1/Include
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Numerics
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Numerics/vxl 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Numerics/vxl/vnl 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Numerics/vxl/vcl
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Numerics/FEM 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Numerics/Statistics 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Algorithms 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/BasicFilters 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Common 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/IO 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/SpatialObject
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Utilities/zlib 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Utilities/png  
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Utilities/MetaIO 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/MetaIO/SpatialObject 
>>>INCLUDEPATH += /usr/local/include/InsightToolkit/Utilities/DICOMParser
>>>INCLUDEPATH += /usr/local/InsightApplications-1.6.0/Auxiliary/vtk 
>>>DESTDIR		= 
>>>HEADERS		= 
>>>SOURCES		= prueba.cxx
>>>INTERFACES	= 
>>>TARGET		= prueba
>>>-------------------------------------------------------------------------
>>>
>>>Above you could see all the LIBS and INCLUDES I'm using to compile.
>>>The code I want you to ask why it is not compiling is the following:
>>>
>>>-------------------------------------------------------------------------
>>>#include "itkImage.h"
>>>#include "itkImageFileReader.h"
>>>#include "itkImageToVTKImageFilter.h"
>>>
>>>#include "vtkImageViewer.h"
>>>#include "vtkRenderWindowInteractor.h"
>>>
>>>int main()
>>>{
>>>
>>>  typedef itk::Image <unsigned short,2> ImageType;
>>>  typedef itk::ImageFileReader <ImageType> ReaderType;
>>>  typedef itk::ImageToVTKImageFilter<ImageType>   ConnectorType;
>>>
>>>  ReaderType::Pointer reader = ReaderType::New();
>>>    reader->SetFileName("./circle.png");
>>>   
>>>  ConnectorType::Pointer connector = ConnectorType::New();
>>>    connector->SetInput( reader->GetOutput() );
>>>
>>>  vtkRenderWindowInteractor *renderWindowInteractor =
>>>vtkRenderWindowInteractor::New();
>>>  
>>>  vtkImageViewer *viewer = vtkImageViewer::New();
>>>    viewer->SetInput( connector->GetOutput() );
>>>    viewer->SetColorWindow( 255 );
>>>    viewer->SetColorLevel( 128 );
>>>    viewer->SetupInteractor( renderWindowInteractor );
>>>   
>>>  viewer->Render();
>>>  renderWindowInteractor->Start();
>>>    
>>>  return 0;
>>>}
>>>---------------------------------------------------------------------------
>>>
>>>The error messages are these ones:
>>>
>>>----------------------------------------------------------------------------
>>>In file included from prueba.cxx:3:
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.h:61: error: wrong
>>>   number of template arguments (2, should be 1)
>>>/usr/local/include/InsightToolkit/BasicFilters/itkVTKImageExport.h:52:
>>>error: provided
>>>   for `template<class TInputImage> class itk::VTKImageExport'
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.h:61: error: ISO
>>>   C++ forbids declaration of `ExporterFilterType' with no type
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.h:62: error: no
>>>   type named `Pointer' in `int'
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.h:62: error: ISO
>>>   C++ forbids declaration of `ExporterFilterPointer' with no type
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx: In
>>>   member function `void
>>>   itk::ImageToVTKImageFilter<TInputImage>::SetInput(const TInputImage*)
>>>[with
>>>   TInputImage = main()::ImageType]':
>>>prueba.cxx:19:   instantiated from here
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:76: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx: In
>>>   constructor `
>>>   itk::ImageToVTKImageFilter<TInputImage>::ImageToVTKImageFilter()
>>>[with
>>>   TInputImage = main()::ImageType]':
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.h:53:   instantiated from `static itk::SmartPointer<itk::ImageToVTKImageFilter<TInputImage> > itk::ImageToVTKImageFilter<TInputImage>::New() [with TInputImage = main()::ImageType]'
>>>prueba.cxx:18:   instantiated from here
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:37: error: `
>>>   int' is not a class type
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:39: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:40: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:41: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:42: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:43: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:44: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:45: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:46: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:47: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:48: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:49: error: base
>>>   operand of `->' is not a pointer
>>>/usr/local/InsightApplications-1.6.0/Auxiliary/vtk/itkImageToVTKImageFilter.txx:50: error: base
>>>   operand of `->' is not a pointer
>>>make: *** [prueba.o] Error 1
>>>
>>>-------------------------------------------------------------------------
>>>
>>>If I exclude the lines related with itkImageToVTKImageFilter.h it works:
>>>
>>>----------------------------------------------------------------------
>>>#include "itkImage.h"
>>>#include "itkImageFileReader.h"
>>>//#include "itkImageToVTKImageFilter.h"
>>>
>>>#include "vtkImageViewer.h"
>>>#include "vtkRenderWindowInteractor.h"
>>>
>>>int main()
>>>{
>>>
>>>  typedef itk::Image <unsigned short,2> ImageType;
>>>  typedef itk::ImageFileReader <ImageType> ReaderType;
>>>  //typedef itk::ImageToVTKImageFilter<ImageType>   ConnectorType;
>>>
>>>  ReaderType::Pointer reader = ReaderType::New();
>>>    reader->SetFileName("./circle.png");
>>>   
>>>  //ConnectorType::Pointer connector = ConnectorType::New();
>>>    //connector->SetInput( reader->GetOutput() );
>>>
>>>  vtkRenderWindowInteractor *renderWindowInteractor =
>>>vtkRenderWindowInteractor::New();
>>>  
>>>  vtkImageViewer *viewer = vtkImageViewer::New();
>>>    //viewer->SetInput( connector->GetOutput() );
>>>    viewer->SetColorWindow( 255 );
>>>    viewer->SetColorLevel( 128 );
>>>    viewer->SetupInteractor( renderWindowInteractor );
>>>   
>>>  viewer->Render();
>>>  renderWindowInteractor->Start();
>>>    
>>>  return 0;
>>>}
>>>-------------------------------------------------------------
>>>
>>>Thanks in advance
>>>
>>>David Macias
>>>
>>>On Thu, 2004-01-29 at 14:20, Luis Ibanez wrote:
>>>
>>>
>>>>Hi David,
>>>>
>>>>The error messages indicate that the
>>>>compiler have not found the declaration
>>>>of the class ImageToVTKImage.
>>>>
>>>>Didn't you get a message saying that the
>>>>header file "itkImageToVTKImageFilter.h"
>>>>wasn't found ?
>>>>
>>>>This is the typical cause for these errors.
>>>>
>>>>In order to compile this example, the
>>>>simplest thing to do is to copy the
>>>>files
>>>>
>>>>     itkImageToVTKImageFilter.h
>>>>     itkImageToVTKImageFilter.txx
>>>>
>>>>in the same directory where your .cxx
>>>>file is. These files are available at
>>>>
>>>>  InsightApplications/Auxiliary/vtk
>>>>
>>>>The reason why these files are not
>>>>along with the basic source tree of
>>>>ITK is that they are a bridge between
>>>>ITK and VTK. Putting these files into
>>>>ITK will create an artificial dependendy
>>>>between ITK and VTK.
>>>>
>>>>Please let us know if you still find
>>>>any problems after copying these files
>>>>into your directory.
>>>>
>>>>
>>>>Thanks
>>>>
>>>>
>>>>   Luis
>>>>
>>>>
>>>>
>>>>------------------
>>>>
>>>>David Macias Verde wrote:
>>>>
>>>>
>>>>
>>>>>Hi all:
>>>>>
>>>>>I am new to itk and I have a very elemental question. When compiling the 
>>>>>source coming in the GettingStarted-II presentation 
>>>>>(/InsightDocuments/CourseWare/Training/ 
>>>>><http://www.itk.org/cgi-bin/cvsweb.cgi/InsightDocuments/CourseWare/Training/GettingStarted-V.ppt?cvsroot=Insight>), 
>>>>>which is
>>>>>
>>>>>#include "itkImage.h"
>>>>>#include "itkImageFileReader.h"
>>>>>#include "itkImageToVTKImageFilter.h"
>>>>>
>>>>>#include "vtkImageViewer.h"
>>>>>#include "vtkRenderWindowInteractor.h"
>>>>>
>>>>>int main( int argc, char **argv ) {
>>>>>
>>>>> typedef itk::Image <unsigned short,2>         ImageType;
>>>>> typedef itk::ImageFileReader <ImageType>      ReaderType;
>>>>> typedef itk::ImageToVTKImageFilter <ImageType>   ConnectorType;
>>>>>
>>>>> ReaderType::Pointer reader = ReaderType::New();
>>>>> ConnectorType::Pointer connector = ConnectorType::New();
>>>>>
>>>>> reader->SetFileName( argv[1] );
>>>>> connector->SetInput( reader->GetOutput() );
>>>>>
>>>>> vtkImageViewer * viewer = vtkImageViewer::New();
>>>>>
>>>>> vtkRenderWindowInteractor * renderWindowInteractor = 
>>>>>vtkRenderWindowInteractor::New();
>>>>>
>>>>> viewer->SetupInteractor( renderWindowInteractor );
>>>>> viewer->SetInput( connector->GetOutput() );
>>>>>
>>>>> viewer->Render();
>>>>> viewer->SetColorWindow( 255 );
>>>>> viewer->SetColorLevel( 128 );
>>>>> renderWindowInteractor->Start();
>>>>>  
>>>>> return 0;
>>>>>}
>>>>>
>>>>>I get the following message.
>>>>>
>>>>>prueba.cxx: In function `int main(int, char**)':
>>>>>prueba.cxx:12: error: ISO C++ forbids declaration of `ImageToVTKImageFilter'
>>>>>  with no type
>>>>>prueba.cxx:12: error: template-id `ImageToVTKImageFilter<main(int,
>>>>>  char**)::ImageType>' used as a declarator
>>>>>prueba.cxx:12: error: syntax error before `;' token
>>>>>prueba.cxx:15: error: `ConnectorType' undeclared (first use this function)
>>>>>prueba.cxx:15: error: (Each undeclared identifier is reported only once for
>>>>>  each function it appears in.)
>>>>>prueba.cxx:15: error: syntax error before `::' token
>>>>>prueba.cxx:18: error: `connector' undeclared (first use this function)
>>>>>prueba.cxx:8: warning: unused parameter `int argc'
>>>>>make: *** [prueba.o] Error 1
>>>>>
>>>>>I think I have all the libraries and includes right directed. May 
>>>>>someone please give me a hand?
>>>>>
>>>>>Cheers,
>>>>>-- 
>>>>>David Macias Verde <_david.maciasverde at gobiernodecanarias.org_ 
>>>>><mailto:david.maciasverde at gobiernodecanarias.org>>
>>>>>Servicio de Física Médica - Hospital de Gran Canaria Dr. Negrín
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>_______________________________________________
>>>>Insight-users mailing list
>>>>Insight-users at itk.org
>>>>http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>>
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk.org
>>http://www.itk.org/mailman/listinfo/insight-users