未解析的外部符号vftable c ++

时间:2012-06-29 11:37:08

标签: visual-studio-2008 visual-c++ mfc vtk

我在我的MFC + vtk项目中使用visual studio 2008。我收到如下链接错误:

  

vtkPBFEAView.obj:警告LNK4217:本地定义的符号?DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ Z(公共:void __thiscall vtkMFCWindow :: DrawDC(类CDC *))在函数中导入“protected:virtual void __thiscall CvtkPBFEAView: :OnDraw(类CDC *)“(?OnDraw @ CvtkPBFEAView @@ MAEXPAVCDC @@@ Z)

     

1> vtkMDIView.obj:警告LNK4049:本地定义的符号?DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ Z(public:void __thiscall vtkMFCWindow :: DrawDC(class CDC *))import   1> vtkPBFEAView.obj:警告LNK4217:本地定义的符号?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z(公共:__thiscall vtkMFCWindow :: vtkMFCWindow(类CWnd *))在函数“public:void __thiscall vtkPBFEAViewImpl :: initialize”中导入(CWnd *类)“(?initialize @ vtkPBFEAViewImpl @@ QAEXPAVCWnd @@@ Z)

     

1> vtkMDIView.obj:警告LNK4049:本地定义的符号?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z(公共:__thiscall vtkMFCWindow :: vtkMFCWindow(类CWnd *))已导入   1> vtkPBFEAView.obj:警告LNK4217:本地定义的符号?? 1vtkMFCWindow @@ UAE @ XZ(public:virtual __thiscall vtkMFCWindow :: ~vtkMFCWindow(void))导入函数“public:virtual void * __thiscall vtkMFCWindow ::`scalar deletion析构函数'(unsigned int)“(?? _ GvtkMFCWindow @@ UAEPAXI @ Z)

     

1> vtkMDIView.obj:警告LNK4217:本地定义的符号?? 1vtkMFCWindow @@ UAE @ XZ(public:virtual __thiscall vtkMFCWindow :: ~vtkMFCWindow(void))在函数“public:void __thiscall vtkMDIViewImpl :: adjust_contours”中导入int,double,double)“(?adjust_contours @ vtkMDIViewImpl @@ QAEXHNN @ Z)

     

1> vtkMFCWindow.obj:错误LNK2019:未解析的外部符号“_ declspec(dllimport)const vtkMFCWindow ::`vftable'”( _imp _ ?? _ 7vtkMFCWindow @@ 6B @)在函数中引用“ public:__thiscall vtkMFCWindow :: vtkMFCWindow(class CWnd *)“(?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z)

有人能解释一下这个错误的原因吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

最后我找到了问题的答案。这是vtkMFCWindow配置了/ MD选项,我的主项目配置了/ MTd选项。因此我得到了错误。一旦我删除了 __ declspec(dllexport)行,它就运行良好。 谢谢你的帮助。

答案 1 :(得分:0)

对于可能找到此解决方案并对其 DLL 函数不再导出以供客户端应用程序使用而感到不安的其他任何人:

MSVC 的 DLL 模板提供了以下样板:

#ifdef DLLNAME_EXPORTS
  #define DLLNAME_API __declspec(dllexport)
#else
  #define DLLNAME_API __declspec(dllimport)
#endif

如果您忘记在项目设置中定义 DLLNAME_EXPORTS,您将收到此消息。如果您重命名这些#defines

,就会发生这种情况