0

私はテンプレートクラスの作成について読んでいて、それを持っていると思います..まあ、1つの厄介なバグを除けば、私には理解できません!

これは私がこれまでに持っているものです:

template<class T>
class CStateMachine
{
public:
    // Constructor
    CStateMachine(QByteArray smName);

private:
    QByteArray _smName;
};

// Here is the constructor implementation
template <class T>
CStateMachine<T>::CStateMachine(QByteArray smName):
    _smName(smName)
{
    qDebug() << "New statemachine:" << _smName << endl;
}

// Now here is the usage called from normal class CRpeComms:
#include "cstatemachine.h"
...
CStateMachine<CRpeComms> rpeSm("test");
...

これにより、エラーが発生します。

unidentified reference to CStateMachine<CRpeComms>::CStateMachine(QByteArray)

注: 私は Qt を使用しているので、よく知らない場合は、qDebug() や std::out など、QByteArray を CString などと考えてください。

私は多くの例を見てきましたが、私のものは同じようです。コンストラクターの実装をヘッダー ファイルに移動すると (以下のように)、問題なく動作します...:

CStateMachine(QByteArray smName):
    _smName(smName)
{
    qDebug() << "new statemachine:" << _smName << endl;
}

だから私はここで何が間違っているのか分かりません...

どんな助けでも大歓迎です!

4

0 に答える 0