2017-09-04 68 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或實現缺少的函數來解決的。