2012-09-25 29 views
0

我ahve一個名爲FiniteStateMachine類中聲明如下得到錯誤LNK2019當我使用std :: auto_ptr的

頭文件:FiniteStateMachine.h

class FiniteStateMachine 
{ 
    public: 
     //Constructor 
     FiniteStateMachine(); 

     //Destructor 
     ~FiniteStateMachine(); 
} 

源文件:FiniteStateMachine.cpp

//////////////////////////////////////////////////////////////////////// 
//  Constructor 
//////////////////////////////////////////////////////////////////////// 
FiniteStateMachine::FiniteStateMachine() 
:m_InitialState("") 
,m_CurrentState(NULL) 
,m_Running(false) 
{ 
    RegisterBaseTypes(); 
} 

//////////////////////////////////////////////////////////////////////// 
//  Destructor 
//////////////////////////////////////////////////////////////////////// 
FiniteStateMachine::~FiniteStateMachine() 
{ 
    if (m_Running) Stop(); 
    Clear(); 
} 

和我有一個名爲FSM的heade文件,我收集它的所有類的項目

FSM.H

class ICORE_API FiniteStateMachine; 

好吧我編譯它,現在想在另一個庫中使用這個類。

關於鏈接該庫的每件事都已完成。

在當我使用FiniteStateMachine與auto_ptr的客戶端類

我收到鏈接錯誤:

#include "FSM.H" 

std::auto_ptr<FiniteStateMachine > fsm; 

error LNK2019: unresolved external symbol "public: __thiscall IFSM::FiniteStateMachine::~FiniteStateMachine(void)" ([email protected]@@[email protected]) referenced in function "public: void * __thiscall FSM::FiniteStateMachine::`scalar deleting destructor'(unsigned int)" ([email protected]@@[email protected]) 

但通過聲明,如該

#include FSM.h 

FiniteStateMachine* fsm; 

每一件事情是確定的和完全的項目編制。

現在我想知道爲什麼會發生這種情況?這裏有什麼問題。

+1

類名稱爲'FiniteStateMachine',ctor/dtor名稱與'IFiniteStateMachine'不匹配。這不應該編譯。如果可以,也可以使用'unique_ptr',而不是'auto_ptr'。 –

+0

對不起,它輸入錯誤 –

+0

「關於鏈接該庫的每件事都已完成」=>顯然不是,因爲你得到一個*鏈接器*錯誤。你在構建中包含了「FiniteStateMachine.obj」嗎? – Jon

回答

2

std::auto_ptr<>生成代碼來調用FiniteStateMachine的析構函數,並且在您不提供它的情況下,因爲您只通過提供前向聲明來提供該代碼。

相關問題