0

私は以下のように宣言された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;

わかりました、コンパイルして、このクラスを別のライブラリで使用したいと思います。

そのライブラリのリンクに関するすべてのことが行われました。

auto_ptr で FiniteStateMachine を使用すると、クライアント クラスでリンカー エラーが発生します。

#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;

すべてが問題なく、プロジェクトは完全にコンパイルされています。

なぜこれが起こるのか知りたいですか?ここで何が問題なのですか。

4

1 に答える 1

2

std::auto_ptr<>、のデストラクタを呼び出すコードを生成FiniteStateMachineします。あなたの場合は、前方宣言を与えることによってのみ提供するため、それを提供しません。

于 2012-09-25T22:09:40.637 に答える