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