当我使用 std::auto_ptr 时出现错误LNK2019

getting error LNK2019 when i use std::auto_ptr

本文关键字:LNK2019 错误 ptr auto std      更新时间:2023-10-16

我有一个名为 FiniteStateMachine 的类,声明如下

头文件 : FiniteStateMachine.h

class FiniteStateMachine
{
    public:
        //Constructor
        FiniteStateMachine();
        //Destructor
        ~FiniteStateMachine();
}

源文件:有限状态机.cpp

////////////////////////////////////////////////////////////////////////
//      Constructor
////////////////////////////////////////////////////////////////////////
FiniteStateMachine::FiniteStateMachine()
:m_InitialState("")
,m_CurrentState(NULL)
,m_Running(false)
{
    RegisterBaseTypes();
}
////////////////////////////////////////////////////////////////////////
//      Destructor
////////////////////////////////////////////////////////////////////////
FiniteStateMachine::~FiniteStateMachine()
{
    if (m_Running) Stop();
    Clear();
}

我有一个名为FSM的头文件,我在其中收集了所有类别的项目

密克罗尼西亚联邦

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;

一切都很好,项目完全编译。

现在我想知道为什么会这样?这里有什么问题。

std::auto_ptr<>生成代码来调用FiniteStateMachine的析构函数,在您的情况下,您不提供它,因为您只能通过提供前向声明来提供。