227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
|
|
1 | |
Шаблоны в header и cpp28.10.2015, 22:54. Просмотров 1936. Ответов 11
Метки нет Все метки)
(
Столкнулся с такой проблемой- пишу инлайн шаблонный предикат в хедер.х ) затем объявляю шаблонизированую ф-цию, затем реализую эту ф-цию уже в срр файле. Компилятор (визуал) не может создать ее инстанс. Перемещаю в реализацию в хедеры- все тип-топ. В чем дело? На мой вопрос препод заявил что надо почитать стандарт, потом сказал что стандарт предусматривает шаблонные прототипы.
0
|
|
28.10.2015, 22:54 | |
Подключение файлов main.cpp some.cpp some.h Библиотеки в CPP. Ошибка компиляции | CPP C:\tsserver\Projects\cpp\codeblocks\MyComp\compiler\mmz\mmz. cpp|29|error: no match for 'operator=' in '* Item = * Source'| |
|
![]() 8311 / 3870 / 840
Регистрация: 15.11.2014
Сообщений: 8,763
|
|
28.10.2015, 22:56 | 2 |
это - мудро, хотя и бесполезно в вашем случае.
это уже избыточно. не разумеющий хотьбы да не услышет бегающего.
1
|
Don't worry, be happy
|
|
28.10.2015, 22:59 | 3 |
определение шаблона должно быть доступно в месте инстанцирования.
Добавлено через 3 минуты ну мало ли. Частенько же цитаты из стандарта помогают ![]()
1
|
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
|
|
28.10.2015, 23:02 [ТС] | 4 |
Croessmah, Спасибо!
Добавлено через 1 минуту hoggy, Я не понял ни вас ни препода, увы(
0
|
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
|
|
28.10.2015, 23:07 [ТС] | 6 |
Croessmah,А вас я как раз понял )или это мне показалось
0
|
13881 / 7417 / 1759
Регистрация: 30.01.2014
Сообщений: 12,409
|
|
29.10.2015, 09:49 | 7 |
![]() Решение
Шаблон - это описание правил, по которым компилятор может сгенерировать код (провести инстанцирование). Т.к. в С++ раздельная компиляция (это значит, что каждый файл (единица трансляции) компилируется отдельно и независимо), в каждой конкретной единице трансляции, где требуется инстанцирование, должно быть доступно полное определение шаблона. Поэтому такое разбиение на разные файлы и не работает.
Эту особенность ранее предлагалось преодолевать с помощью фичи "экспорт шаблонов", которая была реализована в полном объеме только тут (реализация этого здорово усложняла компилятор, поэтому другие производители либо не стали связываться, либо делали частичные экспериментальные реализации). Как обычно, проблема решалась введением доп. уровня косвенности (в виде генерации компилятором спец. файлов с метаинформацией об экспорте). Начиная с С++11 эта возможность удалена из языка, ключевое слово export зарезервировано для будущих изменений. Вообще говоря, эта тема много раз обсуждалась здесь и эти моменты объяснялись. В проф. навыки любого программиста также входит и умение искать информацию самостоятельно. Не стоит пренебрегать обучением этому сейчас, т.к. потом будет некогда учиться.
2
|
Tulosba
|
29.10.2015, 11:29
#8
|
0
|
DrOffset
|
29.10.2015, 13:13
#9
|
0
|
Tulosba
|
29.10.2015, 14:04
#10
|
0
|
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
|
|
29.10.2015, 14:19 [ТС] | 11 |
Tulosba,
![]()
0
|
Croessmah
|
29.10.2015, 16:41
Шаблоны в header и cpp
#12
|
0
|
29.10.2015, 16:41 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
29.10.2015, 16:41 |
Привет! Вот еще темы с ответами:
12
Вот: source_file.cpp: In function 'int main()': source_file.cpp:10:12: error: 'strlen' was not declared in this scope
Использовать void из 1.cpp в 2.cpp Не могу исправить ошибку :113 H:\Dev-Cpp\Проекты\уроки\Безымянный3.cpp cannot convert `IDirectDraw7**' to `IDirectDraw**' for argument `2' to `HRESULT DirectDrawCreate(GUID*, IDirectDraw**, IUnknown*) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |