Hi!
I´m trying to write a new filter, but I´m encountering major difficulties 
defining the New()-method of my class:
I´m deriving from "vtkDataSetToStructuredFilter.h" and my .h-file looks like 
this:

vtkHorizontalAverage.h:
#ifndef __vtkHorizontalAverage_h
#define __vtkHorizontalAverage_h

#include <vtkDataSetToStructuredGridFilter.h>
#include <vtkObjectFactory.h>
#include <vtkObject.h>

class VTK_EXPORT vtkHorizontalAverage : public vtkDataSetToStructuredGridFilter 
{ public:
  static vtkHorizontalAverage *New() {return new vtkHorizontalAverage;}
  //vtkStandardNewMacro(vtkHorizontalAverage);
  vtkTypeMacro(vtkHorizontalAverage,vtkDataSetToStructuredGridFilter);
  vtkSetMacro(Normalize,int);
  vtkGetMacro(Normalize,int);
  vtkBooleanMacro(Normalize, int);
  void PrintSelf(ostream&, vtkIndent);

  protected: vtkHorizontalAverage();
            ~vtkHorizontalAverage(){};
            
             int Normalize;
 
             void operator=(const vtkHorizontalAverage&) {};
             void Execute();
};
#endif

and the corresponding .cxx - File:
#include <vtkHorizontalAverage.h>
vtkHorizontalAverage::vtkHorizontalAverage()
{
    this -> Normalize = 0;
}

void vtkHorizontalAverage::PrintSelf(ostream& os, vtkIndent indent)
{
    this->Superclass::PrintSelf(os,indent);
    
    os << indent << "Normalize: " 
     << (this->Normalize ? this->Normalize : 0) << endl;
}

void vtkHorizontalAverage::Execute(){}


I´m still going to define the Execute() Method. it is just that I want to try 
out the linking!

Well, I get the following errors:

..\..\..\..\bin\libvtkPVFilters.a(vtkPVFiltersInstantiator.obj):vtkPVFiltersInstantiator.cxx(.text+0x2c0):
 undefined reference to 'vtkInstantiatorvtkHorizontalAverageNew()'
..\..\..\..\bin\libvtkPVFilters.a(vtkPVFiltersInstantiator.obj):vtkPVFiltersInstantiator.cxx(.text+0x3c0):
undefined reference to 'vtkInstantiatorvtkHorizontalAverageNew()'

I don´t understand, my New() IS defined as  {return new 
vtkHorizontalAverage;}!!!


Second try: If I really do not define the New() -method, i.e. instead of 
"static vtkHorizontalAverage *New() {return new vtkHorizontalAverage;}"
I just write 
"static vtkHorizontalAverage *New();"
I get the same errors as above, but not just two times, I get them four times. 
!?? 


Third try: using vtkMacros:
I used vtkStandardNewMacro, the code looks like this:

#ifndef
...
#include <vtkObjectFactory.h>
...
class VTK_EXPORT vtkHorizontalAverage : public vtkDataSetToStructuredGridFilter 

{ public:

  //static vtkHorizontalAverage *New() {return new vtkHorizontalAverage;}

  vtkStandardNewMacro(vtkHorizontalAverage);
..

and I get the following errors, now while building the vtkHorizontalAverage.obj 
file:
In file included from D:\ParaView3\Servers\Filters\vtkHorizontalAverage.cxx:1:
D:\ParaView3\Servers\Filters\vtkHorizontalAverage.h:11: error: storage class 
specified for field `vtkInstantiatorvtkHorizontalAverageNew´
D:\ParaView3\Servers\Filters\vtkHorizontalAverage.h:11: error: `vtkObject* 
vtkHorizontalAverage::vtkInstantiatorvtkHorizontalAverageNew()´
and `vtkObject* 
vtkHorizontalAverage::vtkInstantiatorvtkHorizontalAverageNew()´cannot be 
overloaded
D:\ParaView3\Servers\Filters\vtkHorizontalAverage.h: In member function 
`virtual vtkObjectBase* vtkHorizontalAverage::NewInstanceInternal() const`:
D:\ParaView3\Servers\Filters\vtkHorizontalAverage.h:12: error:error:passing 
´const vtkHorizontalAverage´as `this´argument of `vtkHorizontalAverage* 
vtkHorizontalAverage::New() discards qualifiers



Does anyone have an idea what to do?
Thx very much, 
NH









_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
_______________________________________________
ParaView mailing list
[email protected]
http://www.paraview.org/mailman/listinfo/paraview

Reply via email to