c++ - 我的 MouseInteractorStyle : undefined reference to `vtkInteractorStyleZoom::New()'

标签 c++ qt cmake vtk

我在做一个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/

相关文章:

c++ - 将字符串转换为清晰的整数

c++ - 如何将 3 个变量合并为 1 个变量

c++ - 从 C++ 调用组件中定义的 QML 函数

c++ - 使用 Cmake 和 MinGW 编译 OpenCV 2.4.13

file - "otool"和 "file"可以是 't show architecture of the ".a"文件

c++ - 如何使用Boost ASIO与服务器建立多个连接

c++ - 如何将 GDKEvent 时间戳与当前时间进行比较?

c++ - Qt C++、Eclipse(在 Win 7 上)- 项目构建失败,出现 "unresolved reference to _Unwind_Resume"错误

c++ - Q3ListView 是否无法从 Qt 后备存储中注销或代码错误?

cmake - 如何使用 cmake 自动构建第三方库