| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Шаблон: ошибка линкера |
| Автор: nerezus 25.6.2008, 14:44 | ||||||||
У меня используется в коде:
Оно описано в common.h
и реализовано в common.cpp
В чем ошибка? |
| Автор: Fazil6 25.6.2008, 14:48 |
в том, что описано и реализовано в разных файлах. |
| Автор: nerezus 25.6.2008, 14:51 |
| Fazil6, а как надо? Откуда такое требование и как его обойти? Естественно я его из разных файлов вызываю, поэтому заголовок и выделил в отдельный, чтобы ошибки не было, что одинаковые ф-ии объявлены. |
| Автор: georain 25.6.2008, 14:52 |
| Вот на следующей странице этого раздела (используем поиск): http://forum.vingrad.ru/forum/topic-214819.html |
| Автор: nerezus 25.6.2008, 14:58 |
| круто) fixed, but... Если не ошибаюсь, это одна из ошибок именно компилятора, а не прописанная в стандарте фича? |
| Автор: Fazil6 25.6.2008, 15:01 | ||
ошибаешься |
| Автор: bsa 25.6.2008, 15:06 | ||
Именно что прописанная. Чтобы можно было разделять объявление и реализацию шаблонов был придуман механизм extern template. Но большинство компиляторов его не поддерживают. Хотя, в любом случае, твой код без изменений компилироваться бы не стал. |
| Автор: nerezus 25.6.2008, 16:22 |
| bsa, а как его заюзать? ) VS, моследняя версия. Так сказать мейнстрим под винду. |
| Автор: bsa 25.6.2008, 17:54 | ||
То что мейнстрим, еще ничего не значит. Она даже стандарт C99 не поддерживает. Кто-то сказал, что данную возможность поддерживает компилятор от Sun. |
| Автор: JackYF 25.6.2008, 21:48 |
| Данную возможность поддерживает Comeau |
| Автор: bsa 25.6.2008, 22:05 | ||
Очень хорошо. И цена хорошая. Вот только есть одна проблема - платить никто ее не захочет. А бесплатно попробовать нельзя (online неполноценнен, так как тот же буст даже не собрать). |
| Автор: comcon1 26.6.2008, 06:59 |
| Да нафиг это нужно? Если бы у тебя был какой-нить мегапроект на миллион строк... Уж как-то люди обходятся и даже по этому поводу не парятся и нормальные кроскомпилерные библотеки пишут. Конечную реализацию можно отделять в отдельный файл, но не всегда можно так код выстроить. В том примере, что ты привёл, вообще смешно про это говорить. А чтобы ошибки не было, достаточно весь хедер занести в #ifndef #endif -блок. |
| Автор: JackYF 26.6.2008, 15:56 |
| bsa, не спорю Не скажи... Я вот очень был бы рад. |
| Автор: bsa 26.6.2008, 16:21 | ||
Это, думаю, сильно ускорит компиляцию. Когда у тебя, допустим, STL и тот же boost активно используются в программе, то скорость компиляции одного файла довольно низкая. Ситуацию спасает прекомпиляция заголовочных файлов, но ее еще надо настраивать в проекте, причем automake, например, на данный момент этого сделать легко не позволяет. |
| Автор: UnrealMan 26.6.2008, 16:33 |
Поддерживаю. От export-а больше проблем, чем пользы. Добавлено @ 16:38 А возможно, что и, наоборот, затормозит её. Ведь исходные файлы с экспортируемыми шаблонами становятся зависимы друг от друга (а не только от заголовочных файлов). |
| Автор: JackYF 26.6.2008, 19:09 |
Имеешь опыт использования? |
| Автор: UnrealMan 26.6.2008, 20:40 |
К счастью, нет. |
| Автор: bsa 26.6.2008, 21:12 | ||
Это ты зря, подобный опыт в любом случае бывает полезным. |
| Автор: UnrealMan 26.6.2008, 23:04 |
Ну, это как посмотреть. Неудачные проектные решения однажды стоили мне работы из-за провала сроков, и полезного в этом я вижу мало. Из этого опыта я для себя сделал вывод: лучше не пытаться воспользоваться сомнительными методами - это может выйти боком. Экспорт шаблонов - весьма сомнительная штука (проблемы экспорта шаблонов затрагиваются в Новых сложных задачах Саттера), и я бы воздержался от его использования. |
| Автор: xvr 27.6.2008, 10:51 | ||
Это точно |
| Автор: bsa 27.6.2008, 15:07 | ||
О. Вот это уже хорошая и полезная информация. |
| Автор: Любитель 27.6.2008, 15:28 |
| Раз уж так пошло - а почему интеловый компилер забыли. Тем более, что есть бесплатная редакция под линь. Он поддерживает экспорт. Серёзно не использовал (ибо терять совместимость и с гцц, и с msvc - не особо хочется) - особой статистики не дам. Хотя можно попробовать |
| Автор: nerezus 27.6.2008, 20:32 |
| Хех, я когда возможно делаю это во время исполнения(ООП ибо. Наследование от общего класса, (un)boxing), но просто приходится использовать стандартные классы/типы, у которых нет общего предка. Мне это жутко не нравится, но приходится самому делать шаблоны. |