Проблема с линковкой
От: Nicolay Россия  
Дата: 06.11.02 14:21
Оценка:
У меня небольшой шаблон.
Я почему то не могу откомпелить тестовую программу.

пишу так
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)'
Причем есть в моём шаблоне и такие функции, на которые он так и необратил своего пристального внимания.
Re: Проблема с линковкой
От: YuriS Германия www.yuris.de
Дата: 06.11.02 20:51
Оценка:
Здравствуйте Nicolay, Вы писали:

N>У меня небольшой шаблон.

N>Я почему то не могу откомпелить тестовую программу.

потому что тело шаблона должно лежать в хидере
... << RSDN@Home 1.0 alpha 12 >>
Re[2]: Проблема с линковкой
От: Nicolay Россия  
Дата: 10.11.02 14:15
Оценка:
Здравствуйте YuriS, Вы писали:

YS>Здравствуйте Nicolay, Вы писали:


N>>У меня небольшой шаблон.

N>>Я почему то не могу откомпелить тестовую программу.

YS>потому что тело шаблона должно лежать в хидере

Это что же, весь шаблон должен быть в хедере?
Что-то странновато!
Хотя слил всё, что было в CPP'файле в хедер.
Работает!!! Спасибо большое, за совет, но один вопрос остался.
Почему у меня он не на всё функции ругался, а на избранные?
Re[3]: Проблема с линковкой
От: Dmitry A. Sustretov Россия  
Дата: 11.11.02 11:19
Оценка:
Здравствуйте Nicolay, Вы писали:

N>>>У меня небольшой шаблон.

N>>>Я почему то не могу откомпелить тестовую программу.

YS>>потому что тело шаблона должно лежать в хидере

N>Это что же, весь шаблон должен быть в хедере?
N>Что-то странновато!
N>Хотя слил всё, что было в CPP'файле в хедер.

Страуструп пишет, что если объявлять

extern template<class Foo>
class Bar
{
// ...
}

то можно линковать шаблон из других объектников. Но

1) это зависит от компилятора
2) компилятору надо как-то указать все объектники, из которых ты будешь использовать этот шаблон.

Попробуй, может gcc умеет. Возможно понадобится компилировать весь проект сразу

gcc bar1.cpp bar2.cpp bar3.cpp templ.cpp -o foo
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.