2012-09-25 4 views
0

내가 FiniteStateMachine라는 클래스가 선언 ahve를 사용할 때 오류 LNK2019를 받고 내가 표준 : : auto_ptr은

아래의 헤더 파일로 : FiniteStateMachine.cpp

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

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

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

     //Destructor 
     ~FiniteStateMachine(); 
} 

소스 파일 FiniteStateMachine.h

그리고 나는 그것에 프로젝트의 모든 클래스를 수집 FSM라는 heade 파일을 가지고있다

FSM.H

class ICORE_API FiniteStateMachine; 

확인 나는 그것을 지금 싶어 다른 라이브러리에이 클래스를 사용하여 컴파일합니다.

모든 라이브러리에 대한 링크가 완료되었습니다. 내가 auto_ptr은 함께 FiniteStateMachine를 사용하는 클라이언트 클래스에서

은 내가 링커 오류 얻을 :

#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'과 일치하지 않습니다. 이것은 컴파일해서는 안됩니다. 가능하면'auto_ptr'가 아닌'unique_ptr'을 사용하십시오. –

+0

죄송합니다. 입력하신 오류가 –

+0

입니다. "해당 라이브러리를 연결하는 모든 작업이 완료되었습니다."=> 분명히 아닙니다. * 링커 * 오류가 발생했기 때문입니다. 빌드에'FiniteStateMachine.obj'를 포함하고 있습니까? – Jon

답변

2

std::auto_ptr<>FiniteStateMachine의 소멸자를 호출하는 코드를 생성하며, 사용자가 전달 선언을 제공함으로써 제공하는 것이므로 사용자가 제공하지 않습니다.

관련 문제