2017-09-04 159 views
0

我想要继承vtkActor类。但我的课不断收到错误“未定义的参考`vtkIntraLatticeObject :: New()”如何继承vtkActor?

我发现这个link。我试过,但我得到“未定义的引用vtkIntraLatticeObject :: vtkIntraLatticeObject()”。我也不是100%相信这是要走的路。我设法得到了下面的例子work。所以我很难理解与我的代码有什么不同。

所以这里是我的代码类。
vtkIntraLatticeObject.h

#ifndef VTKINTRALATTICEOBJECT_H 
#define VTKINTRALATTICEOBJECT_H 


#include <vtkSmartPointer.h> 
#include <vtkRenderer.h> 
#include <vtkObjectFactory.h> 
#include <vtkRenderingCoreModule.h> 
#include <vtkProperty.h> 
#include <string.h> 
#include <vtkActor.h> 

class VTKRENDERINGCORE_EXPORT vtkIntraLatticeObject : public vtkActor 
{ 
    public: 

     vtkTypeMacro(vtkIntraLatticeObject, vtkActor); 
     static vtkIntraLatticeObject* New(); 

     int assignID(); 

     std::string getObjectTypeName(); 


    protected: 
     int ID; 
     static int intralatticeActorCounter; 

     vtkActor* Device; 

     vtkIntraLatticeObject(); 
     ~vtkIntraLatticeObject(); 

}; 


#endif 

vtkIntraLatticeObject.cc

#include "vtkIntraLatticeObject.h" 

vtkStandardNewMacro(vtkIntraLatticeObject); 

int vtkIntraLatticeObject::intralatticeActorCounter = 0; 

vtkIntraLatticeObject::vtkIntraLatticeObject() 
{ 
    int ID = -1; 
    this -> Device = vtkActor::New(); 
} 

vtkIntraLatticeObject::~vtkIntraLatticeObject() 
{ 
    this -> Device -> Delete(); 
} 

int vtkIntraLatticeObject::assignID() 
{ 
    ID = intralatticeActorCounter; 
    intralatticeActorCounter++; 
    return ID; 
} 

std::string vtkIntraLatticeObject::getObjectTypeName() 
{ 
    return "generic intralattice Object"; 
} 
+0

你的代码编译正常与VTK 7.0,唯一的变化是改变vtkRevisionTypeMacro - > vtkTypeMacro - 它已在vtk 6.0中重命名,但该特定宏的实现可能是相同的,所以它可能不是源的问题。但是,由于您正在使用该版本,我假设您使用的是旧版本的VTK。由于您的错误与New()有关,因此我会查看VTK中vtkStandardNew宏的实现,并将其与当前的7.0实现进行比较,以查看缺少的内容。或者寻找一些老的教程。 – tomj

+0

嗨感谢您的反馈@tomj。的确,我正在使用vtk 6.2进行编译。由于我没有特别的原因使用这个版本。我将尝试迁移到vtk 7.0 – curtainsbaked

+0

您好@tomj,我使用vtk 8.0进行编译,但我仍然遇到同样的错误。也许对我的安装或cmake文件有些好玩。你有没有机会拥有你使用的cmake文件? – curtainsbaked

回答

0

原来,这是我的cmake的文件,我没有做递归水珠。问题文件位于下方两层。所以当编译器运行时,它找不到.cc文件。
我唯一要补充的是vtkActor是一个抽象类。所以一些功能实际上并没有实现。所以当我试图显示我的vtkActor时,它是不可见的。这是通过继承vtkOpenGlActor而不是vtkActor或实现缺少的函数来解决的。