0

我一直在阅读有关创建模板类的内容,我想我拥有它.. 好吧,除了一个令人讨厌的错误之外,我想不出!

这就是我到目前为止所拥有的:

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