簡體   English   中英

VTK / ITK / QT-未解決的外部符號錯誤(LNK2001)

[英]VTK / ITK/ QT - unresolved external symbol error (LNK2001)

在Visual Studio 2013中使用帶有Qt5.7和ITK 4.5的VTK 7.0構建代碼時,出現以下錯誤:

錯誤LNK2001:無法解析的外部符號“受保護:虛擬void __cdecl vtkVRMLSource2 :: SetNthOutput(int,class vtkDataObject *)”(?SetNthOutput @ vtkVRMLSource2 @@ MEAAXHPEAVvtkDataObject @@@ Z

與此文件對應的代碼是(vtkVRMLSource2.cxx``):

#include "vtkVRML.h"
#include "vtkVRMLSource2.h"
#include "vtkVRMLImporter.h"
#include "vtkObjectFactory.h"
#include "vtkPolyData.h"
#include "vtkProperty.h"
#include "vtkActorCollection.h"
#include "vtkActor.h"
#include "vtkPointData.h"
#include "vtkCellData.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderer.h"
#include "vtkTransformPolyDataFilter.h"
#include "vtkAppendPolyData.h"
#include "vtkTransform.h"
#include "vtkUnsignedCharArray.h"
#include "vtkSmartPointer.h"
#include "vtkFloatArray.h"
#include "vtkDataObject.h"
#include <stdio.h>
#include <iostream>
.....
idx = 0;
while ( (actor = actors->GetNextActor()) )
{
mapper = vtkPolyDataMapper::SafeDownCast(actor->GetMapper());
if (mapper)
  {
  //mapper->GetInput()->Update();
  //vtkPolyData *newOutput = vtkPolyData::New();
  vtkPolyData *newOutput = mapper->GetInput();
  //newOutput->CopyInformation(mapper->GetInput());
  this->SetNthOutput(idx, newOutput);
  ++idx;
  newOutput->Delete();
  newOutput = NULL;
  }
}

vtkVRMLSource2.h文件為:

#include "vtkAlgorithm.h"
#include "vtkDataObject.h"
class vtkVRMLSource2 : public vtkAlgorithm{

public:
int  vtkTypeRevisionMacro(vtkVRMLSource2, vtkAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
static vtkVRMLSource2 *New();
int NumberOfOutputs;

vtkSetStringMacro(FileName)
vtkGetStringMacro(FileName)

int GetNumberOfOutputs();
vtkPolyData* GetOutput(int idx);
vtkPolyData* GetOutput() { return this->GetOutput(0);}

vtkSetMacro(Color,int) // usage example: this->SetColor(1);
vtkGetMacro(Color,int)
vtkBooleanMacro(Color,int)

vtkSetMacro(Append,int) // usage example: this->SetAppend(1);
vtkGetMacro(Append,int)
vtkBooleanMacro(Append,int)

protected:
 vtkVRMLSource2();
 ~vtkVRMLSource2();

 void Execute();
 void InitializeImporter();
 void CopyImporterToOutputs();

 char* FileName;
 vtkVRMLImporter *Importer;
 int Color;
 int Append;

 virtual void SetNthOutput(int num, vtkDataObject *output);
 private:
   vtkVRMLSource2(const vtkVRMLSource2&);  
   void operator=(const vtkVRMLSource2&); 
};

我已經在VS中鏈接了所有正確的VTK,ITK和Qt庫。 請你幫助我好嗎?

您需要提供在頭文件中聲明的void SetNthOutput(int num, vtkDataObject *output)定義。 您可以通過將其添加到vtkVRMLSource2.cxx來實現:

void vtkVRMLSource2::SetNthOutput(int num, vtkDataObject *output)
{
    //code goes here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM