"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
文件中实现,但该示例似乎工作正常。但是当我尝试用我自己的轨迹球相机版本重新创建它时,我在我自己的子类的新方法上遇到了链接错误。
因此我有两个问题:
- 为什么
New()
方法的实现不在.cxx
文件中?
- 为什么当我尝试做完全相同的事情(只是 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..."
虽然只是尝试重写 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
文件中实现,但该示例似乎工作正常。但是当我尝试用我自己的轨迹球相机版本重新创建它时,我在我自己的子类的新方法上遇到了链接错误。
因此我有两个问题:
- 为什么
New()
方法的实现不在.cxx
文件中? - 为什么当我尝试做完全相同的事情(只是 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..."