vtk和子类

时间:2015-10-27 13:44:12

标签: c++ subclass instantiation vtk

虽然只是试图重写一个VTK示例代码中使用的类之一(参见here),但我决定继承vtkInteractorStyle以重新创建一个非常类似于vtkInteractorStyleTrackballCamera。因此,我决定复制/粘贴vtkInteractorStyleTrackballCamera找到herehere的实现(github链接到代码)。

但是,我注意到在此代码中New()方法未在.cxx文件中实现,但该示例似乎工作正常。但是当我尝试使用我自己的trackballcamera版本重新创建它时,我在我自己的子类的新方法上出现了链接错误。

因此我有两个问题:

  1. 为什么New()方法的实施不在.cxx文件中?
  2. 为什么我尝试做同样的事情(只是复制/粘贴和更改名称)它不起作用?
  3. 我对这两个'问题'感到茫然。希望你能帮助我解决它们。

    编辑: 这是我的头文件的开头:

    #ifndef InteractorStyleTrackballCamera_h
    #define InteractorStyleTrackballCamera_h
    
    #include "vtkInteractionStyleModule.h" // For export macro
    #include "vtkInteractorStyle.h"
    
    class VTKINTERACTIONSTYLE_EXPORT InteractorStyleTrackballCamera : public vtkInteractorStyle
    {
    public:
      static InteractorStyleTrackballCamera *New();
      ....
    

    这是我的cpp文件的开头:

    #include "InteractorStyleTrackballCamera.h"   
    #include "vtkCamera.h"
    #include "vtkCallbackCommand.h"
    #include "vtkMath.h"
    #include "vtkObjectFactory.h"
    #include "vtkRenderWindow.h"
    #include "vtkRenderWindowInteractor.h"
    #include "vtkRenderer.h"
    
    vtkStandardNewMacro(InteractorStyleTrackballCamera);
    
    //----------------------------------------------------------------------------
    InteractorStyleTrackballCamera::InteractorStyleTrackballCamera()
    {
      this->MotionFactor   = 10.0;
    }
    
    //----------------------------------------------------------------------------
    InteractorStyleTrackballCamera::~InteractorStyleTrackballCamera()
    {
    }
    

2 个答案:

答案 0 :(得分:4)

您可能遗漏了vtkStandardNewMacro(<class_name>)文件中的.cxx。这定义了绝大多数VTK类中的New()成员函数。

答案 1 :(得分:2)

除非将其构建到vtkInteractionStyle库/模块中,否则不能在头文件中使用VTKINTERACTIONSTYLE_EXPORT。您必须拥有自己的库导出宏。

该宏有效地说“当构建共享库时导出此类,当使用共享库时导入,并且当库是静态时...”< / p>