我一直在阅读有关创建模板类的内容,我想我拥有它.. 好吧,除了一个令人讨厌的错误之外,我想不出!
这就是我到目前为止所拥有的:
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;
}
所以我不确定我在这里做错了什么......
非常感谢任何帮助!