"New" 使用 vtk 和子类实现

"New" implementation with vtk and subclass

虽然只是尝试重写 VTK 示例代码中使用的 类 之一(参见 here), I decided to subclass vtkInteractorStyle in order to re-create a class very similar to vtkInteractorStyleTrackballCamera. Therefore I decide to copy/paste the implementation of vtkInteractorStyleTrackballCamera found here and here(github 代码链接)。

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

因此我有两个问题:

  1. 为什么New()方法的实现不在.cxx文件中?
  2. 为什么当我尝试做完全相同的事情(只是 copying/pasting 和更改名称)时它不起作用?

我对这两个很茫然'issues'。希望你能帮我弄清楚。


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

#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()
{
}

您可能缺少 .cxx 文件中的 vtkStandardNewMacro(<class_name>)。这在绝大多数 VTK 类.

中定义了 New() 成员函数

您不能在头文件中使用 VTKINTERACTIONSTYLE_EXPORT,除非您将其构建到 vtkInteractionStyle library/module 中。您必须为您的图书馆拥有自己的导出宏。

那个宏实际上是说 "this class is exported when building the shared library, imported when using the shared library, and neither when library is static..."