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";
}
你的代碼編譯正常與VTK 7.0,唯一的變化是改變vtkRevisionTypeMacro - > vtkTypeMacro - 它已在vtk 6.0中重命名,但該特定宏的實現可能是相同的,所以它可能不是源的問題。但是,由於您正在使用該版本,我假設您使用的是舊版本的VTK。由於您的錯誤與New()有關,因此我會查看VTK中vtkStandardNew宏的實現,並將其與當前的7.0實現進行比較,以查看缺少的內容。或者尋找一些老的教程。 – tomj
嗨感謝您的反饋@tomj。的確,我正在使用vtk 6.2進行編譯。由於我沒有特別的原因使用這個版本。我將嘗試遷移到vtk 7.0 – curtainsbaked
您好@tomj,我使用vtk 8.0進行編譯,但我仍然遇到同樣的錯誤。也許對我的安裝或cmake文件有些好玩。你有沒有機會擁有你使用的cmake文件? – curtainsbaked