Правильный синтаксис:
template <typename T>
BoundedBuffer<T>::BoundedBuffer(const unsigned int size) : size(size) {
// create array of entries
entries = new T[size];
// initialize all entries to null
for(int i = 0; i < size; i++)
entries[i] = null;
}
Обратите внимание, что необязательные параметры должны быть объявлены не в определениях функций, а только в объявлениях функций.
class aaa
{
// declaration
void xxx(int w = 10);
};
// definition
void aaa::xxx(int w)
{
...
}
Обратите внимание, что все для шаблонного класса должно оставаться в файлах H.
"Они должны находиться в одном и том же модуле перевода. В некоторых библиотеках довольно распространено разделять реализацию шаблона на файл .tpp (или другое расширение), который затем включается в .h, где шаблон объявляется. " как сказал Майкл Прайс.
Шаблоны не являются обычными типами и не могут быть связаны.
Они создаются только по запросу.
Обратите внимание, что инициализаторам полей конструкторов необходим символ ":".
class MyClass
{
public:
int x;
MyClass() : x(10) { /* note that i used : character */ }
};