получаю ошибку LNK2019 когда я использую std :: auto_ptr

У меня есть класс с именем 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, который я собираю в нем весь класс проекта

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

Решение

std::auto_ptr<> генерирует код для вызова FiniteStateMachineдеструктор, и в вашем случае вы не предоставляете его, потому что вы предоставляете только путем подачи предварительной декларации.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]