У меня небольшой шаблон.
Я почему то не могу откомпелить тестовую программу.
пишу так
g++ test.cpp mytempl.cpp -o test
А мне он говорит следующее.
/tmp/ccMmnm3s.o: In function `main':
/tmp/ccMmnm3s.o(.text+0x2a): undefined reference to `mytempl<double>::mytempl(int, int, double **)'
/tmp/ccMmnm3s.o(.text+0x41): undefined reference to `mytempl<double>::~mytempl(void)'
/tmp/ccMmnm3s.o(.text+0xe3): undefined reference to `mytempl<double>::SetElement(int, int, double)'
/tmp/ccMmnm3s.o(.text+0x103): undefined reference to `mytempl<double>::GetElement(int, int)'
/tmp/ccMmnm3s.o(.text+0x144): undefined reference to `mytempl<double>::~mytempl(void)'
Причем есть в моём шаблоне и такие функции, на которые он так и необратил своего пристального внимания.
Здравствуйте YuriS, Вы писали:
YS>Здравствуйте Nicolay, Вы писали:
N>>У меня небольшой шаблон. N>>Я почему то не могу откомпелить тестовую программу.
YS>потому что тело шаблона должно лежать в хидере
Это что же, весь шаблон должен быть в хедере?
Что-то странновато!
Хотя слил всё, что было в CPP'файле в хедер.
Работает!!! Спасибо большое, за совет, но один вопрос остался.
Почему у меня он не на всё функции ругался, а на избранные?
Здравствуйте Nicolay, Вы писали:
N>>>У меня небольшой шаблон. N>>>Я почему то не могу откомпелить тестовую программу.
YS>>потому что тело шаблона должно лежать в хидере N>Это что же, весь шаблон должен быть в хедере? N>Что-то странновато! N>Хотя слил всё, что было в CPP'файле в хедер.
Страуструп пишет, что если объявлять
extern template<class Foo>
class Bar
{
// ...
}
то можно линковать шаблон из других объектников. Но
1) это зависит от компилятора
2) компилятору надо как-то указать все объектники, из которых ты будешь использовать этот шаблон.
Попробуй, может gcc умеет. Возможно понадобится компилировать весь проект сразу