我有一个名为FiniteStateMachine的类,声明如下
头文件: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)" (??1FiniteStateMachine@IFSM@@QAE@XZ) referenced in function "public: void * __thiscall FSM::FiniteStateMachine::`scalar deleting destructor'(unsigned int)" (??_GFiniteStateMachine@IFSM@@QAEPAXI@Z)
但是通过声明这样的
#include FSM.h
FiniteStateMachine* fsm;
每件事都没问题,项目完全编译完毕。
现在我想知道为什么会这样?这里有什么不对。
答案 0 :(得分:2)
std::auto_ptr<>
生成调用FiniteStateMachine
析构函数的代码,在您的情况下,您不提供它,因为您只提供前向声明。