История изменений
Исправление alysnix, (текущая версия) :
у тебя класс Stream «int» нигде не инстанцируется целиком.
#include "lib.h"
#include "stream.h"
Lib::Lib() {}
void Lib::test()
{
Stream<int> s;
s.test();
}
тут не инстанцируется, поскольку в хидере шаблона нет тел методов, а только декларации. инстанциацию делает компилятор, видя код тел методов шаблона класса. если он тела не видит, а только заголовки, как у тебя - ему кажется, что шаблон инстанцируется как-то иначе. потому либо ты должен шаблон инстанцировать ручками в stream.cpp, либо вытащить тела методов шаблона в stream.h
инстанциация делается там, где встречается обьявление обьекта данного класса и видим полный шаблон класса. будет быть много инстанциаций (каждая в своем обьектнике, использующем шаблон), но линкер потом выкинет тавтологии и оставит только первую.
Исходная версия alysnix, :
у тебя класс Stream «int» нигде не инстанцируется целиком.
#include "lib.h"
#include "stream.h"
Lib::Lib() {}
void Lib::test()
{
Stream<int> s;
s.test();
}
тут не инстанцируется, поскольку в хидере шаблона нет тел методов, а только декларации. инстанциацию делает компилятор, видя код тел методов класса. если он тела не видит, а только заголовки, как у тебя - ему кажется, что класс инстанцируется как-то иначе. потому либо ты должен класс инстанцировать ручками в stream.cpp, либо вытащить тела методов шаблона в stream.h
инстанциация делается там, где встречается обьявление обьекта данного класса и видим полный шаблон класса. будет быть много инстанциаций (каждая в своем обьектнике, использующем шаблон), но линкер потом выкинет тавтологии и оставит только первую.