我对模板很新,所以如果我的代码非常错误,请不要苛刻我:)
这是使用模板的类Key
的头文件:
//Key.h
#ifndef KEY_H
#define KEY_H
#include "../Constants.h"
template<class KeyType>
class Key
{
public:
Key<KeyType>(KeyType initial);
KeyType increment();
private:
KeyType current;
};
#endif /* KEY_H */
这是Key
类的.cpp文件:
//Key.cpp
#include "Key.h"
template<class KeyType> Key<KeyType>::Key(KeyType p_initial)
{
this->current = p_initial;
}
template<class KeyType> KeyType Key<KeyType>::increment()
{
this->current ++; //KeyType should implement this operator
}
那么问题是什么?我尝试在我的代码中的其他地方创建Key
的实例,如下所示:
Key songID(0); //错误:对
的未定义引用Key<int>::Key(int)
然后使用
songID.increment(); //错误:对
的未定义引用Key<int>::increment()
答案 0 :(得分:1)
两点:
从您不需要的<KeyType>
移除Key<KeyType>(KeyType initial);
。
并且,将类实现从.cpp
文件移动到.h
文件。这篇文章很有用:Why can't I separate the definition of my templates class from its declaration and put it inside a .cpp file?