我在做一个vtk项目 我想编写自己的鼠标交互器样式 我写了这门课
vtkInteractorStyleZoom.h
#include <vtkSmartPointer.h>
#include <vtkInteractorStyleTrackballCamera.h>
class vtkInteractorStyleZoom: public vtkInteractorStyleTrackballCamera
{
public:
static vtkInteractorStyleZoom* New();
vtkTypeMacro(vtkInteractorStyleZoom , vtkInteractorStyleTrackballCamera);
virtual void OnLeftButtonDown();
};
vtkInteractorStyleZoom.cpp
#include "vtkInteractorStyleZoom.h"
vtkStandardNewMacro(vtkInteractorStyleZoom);
void vtkInteractorStyleZoom::OnLeftButtonDown()
{
this->StartDolly();
}
这是我使用这个类的函数
void ReadDICOMSeriesQt::on_ZoomButton_clicked()
{
vtkSmartPointer<vtkInteractorStyleZoom> Style =
vtkSmartPointer<vtkInteractorStyleZoom>::New();
ui->qvtkWidget->GetRenderWindow()->GetInteractor()-
>SetInteractorStyle(Style);
}
当我用 cmake 编译我的项目时我遇到了这个问题
CMakeFiles\ReadDICOMSeriesQt.dir/objects.a(ReadDICOMSeriesQt.cxx.obj):在函数 ZN15vtkSmartPointerI22vtkInteractorStyleZoomE3NewEv' 中:
C:/VTK/VTK-7.0.0/Common/Core/vtkSmartPointer.h:117: undefined reference
vtkInteractorStyleZoom::New()'
我不知道 cmake 是否有任何问题(也许我必须更改我的 CMakeLists.txt 中的某些内容)
有没有人可以帮助我?
最佳答案
您缺少的是构造函数定义。构造函数必须不带任何参数,以便对象工厂机制起作用。将其设为私有(private),因为没有人应该直接调用它。 您还应该禁用类的复制语义。即
class vtkInteractorStyleZoom : public vtkInteractorStyleTrackballCamera
{
public:
static vtkInteractorStyleZoom* New();
vtkTypeMacro(vtkInteractorStyleZoom, vtkInteractorStyleTrackballCamera);
virtual void OnLeftButtonDown();
private:
vtkInteractorStyleZoom() { /* definition, if any */ }
vtkInteractorStyleZoom(const vtkInteractorStyleZoom&) = delete;
void operator =(const vtkInteractorStyleZoom&) = delete;
};
另外,你应该 #include <vtkObjectFactory.h>
在 .cpp 文件中——这是定义 vtkStandardNewMacro() 的地方。
然后确保调用者模块 (ReadDICOMSeriesQt) 链接到 vtkInteractorStyleZoom 所属的库。
关于c++ - 我的 MouseInteractorStyle : undefined reference to `vtkInteractorStyleZoom::New()' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45029513/