[Insight-users] [ITK Community] [Insight-Developers] Problem with trivial filter (no inputs and outputs)

Alessio Mazzarini alessiomazzarini89 at gmail.com
Thu Jan 23 14:53:02 EST 2014


Hi Matt, thanks for the reply.
All these files are in the same directory (main.cxx   TrainingFilter.cxx 
TrainingFilter.h    CmakeLists.txt)
My CMakeLists code is here:

PROJECT (Training)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

FIND_PACKAGE (ITK REQUIRED)
INCLUDE (${ITK_USE_FILE})

ADD_EXECUTABLE ( TrainingFilter main.cxx )

TARGET_LINK_LIBRARIES( TrainingFilter ${ITK_LIBRARIES})




Il 23/01/2014 20:13, Matt McCormick ha scritto:
> Hi Alessio,
>
> It looks like your making good progress.
>
> The next step is to inherit from ProcessObject instead of Object to
> get the filter pipeline functionality (which may be important
> depending on the application).
>
> Regarding the linking error, what does the CMakeLists.txt look like?
> Is the file TrainingFilter.cxx (where itk::TrainingFilter::Update() is
> defined) built into the executable?
>
> Thanks,
> Matt
>
> On Thu, Jan 23, 2014 at 11:56 AM, Alessio Mazzarini
> <alessiomazzarini89 at gmail.com> wrote:
>> 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
>>
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.php
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>> _______________________________________________
>> Community mailing list
>> Community at itk.org
>> http://public.kitware.com/cgi-bin/mailman/listinfo/community



More information about the Insight-users mailing list