虽然只是试图重写一个VTK示例代码中使用的类之一(参见here),但我决定继承vtkInteractorStyle
以重新创建一个非常类似于vtkInteractorStyleTrackballCamera
。因此,我决定复制/粘贴vtkInteractorStyleTrackballCamera
找到here和here的实现(github链接到代码)。
但是,我注意到在此代码中New()
方法未在.cxx
文件中实现,但该示例似乎工作正常。但是当我尝试使用我自己的trackballcamera版本重新创建它时,我在我自己的子类的新方法上出现了链接错误。
因此我有两个问题:
New()
方法的实施不在.cxx
文件中?我对这两个'问题'感到茫然。希望你能帮助我解决它们。
编辑: 这是我的头文件的开头:
#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()
{
}
答案 0 :(得分:4)
您可能遗漏了vtkStandardNewMacro(<class_name>)
文件中的.cxx
。这定义了绝大多数VTK类中的New()
成员函数。
答案 1 :(得分:2)
除非将其构建到vtkInteractionStyle库/模块中,否则不能在头文件中使用VTKINTERACTIONSTYLE_EXPORT
。您必须拥有自己的库导出宏。
该宏有效地说“当构建共享库时导出此类,当使用共享库时导入,并且当库是静态时...”< / p>