[Insight-developers] [Insight-Developers] Problem with trivial filter (no inputs and outputs)

Alessio Mazzarini alessiomazzarini89 at gmail.com
Thu Jan 23 11:56:56 EST 2014


Hi all. I'm trying to create a very simple filter with no inputs and 
outputs and templates but when i make it, compilers gives me some errors 
and i don't understand how to fix them.

this is my header file of the filter:
****************TrainingFilter.h******************
#ifndef __TrainingFilter_h
#define __TrainingFilter_h

#include "itkObject.h"
#include "itkImage.h"

namespace itk
{
  class  TrainingFilter :
    public Object
{
     public:
       /** Standard class typedefs. */
   typedef TrainingFilter                                   Self;
   typedef Object Superclass;
   typedef SmartPointer < Self > Pointer;
   typedef SmartPointer < const Self > ConstPointer;

   itkNewMacro (Self);
   itkTypeMacro(TrainingFilter, Object);

   void Update();  //Method of the filter

protected:
   TrainingFilter();
   ~TrainingFilter();

private:
   TrainingFilter(const Self &); //purposely not implemented
   void operator=(const Self &);          //purposely not implemented
   };
}
#endif


This is its implementation:
*******************TrainingFilter.cxx*************
#include "TrainingFilter.h"
#include "itkObject.h"
#include <iostream>

namespace itk
{
TrainingFilter::TrainingFilter()  { };

TrainingFilter::~TrainingFilter()  { };

   void TrainingFilter::Update()
{
std::cout<<"**Filter called .cxx **"<<std::endl;
}
} // end namespace



and this is my main, where i try, as usual, to create a FilterType and a 
smartpointer to call the Update method.
***********main.cxx*****************
#include "TrainingFilter.h"
#include <iostream>
using namespace std;

int main(int argc, char * argv [])
{
   typedef itk::TrainingFilter  FilterTypeTraining;
   FilterTypeTraining::Pointer filterTraining = FilterTypeTraining::New();

   try
     {
     filterTraining-> Update();
     }
   catch( itk::ExceptionObject & excp )
     {
     std::cerr << "Exception caught !" << std::endl;
     std::cerr << excp << std::endl;
     }
   return 0;
}



This is the compiler error:

CMakeFiles/TrainingFilter.dir/main.cxx.o: In function `main':
main.cxx:(.text+0x2c): undefined reference to 
`itk::TrainingFilter::Update()'
CMakeFiles/TrainingFilter.dir/main.cxx.o: In function 
`itk::TrainingFilter::New()':
main.cxx:(.text._ZN3itk14TrainingFilter3NewEv[itk::TrainingFilter::New()]+0x42): 
undefined reference to `itk::TrainingFilter::TrainingFilter()'
CMakeFiles/TrainingFilter.dir/main.cxx.o: In function 
`itk::ObjectFactory<itk::TrainingFilter>::Create()':
main.cxx:(.text._ZN3itk13ObjectFactoryINS_14TrainingFilterEE6CreateEv[itk::ObjectFactory<itk::TrainingFilter>::Create()]+0xe): 
undefined reference to `typeinfo for itk::TrainingFilter'
main.cxx:(.text._ZN3itk13ObjectFactoryINS_14TrainingFilterEE6CreateEv[itk::ObjectFactory<itk::TrainingFilter>::Create()]+0x47): 
undefined reference to `typeinfo for itk::TrainingFilter'
collect2: ld returned 1 exit status
make[2]: *** [TrainingFilter] Error 1
make[1]: *** [CMakeFiles/TrainingFilter.dir/all] Error 2
make: *** [all] Error 2



Thanks for your help,
Alessio



More information about the Insight-developers mailing list