3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84
|
||||||||||||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||||||||||||
Неопределённая ссылка на функцию08.10.2021, 23:41. Показов 10603. Ответов 7
Доброго времени суток!
Имеется несколько файлов кода: main.cpp
0
|
08.10.2021, 23:41 | |
Ответы с готовыми решениями:
7
Неопределенная ссылка Неопределённая ссылка неопределенная ссылка Неопределенная ссылка на `WinMain @ 16 ' |
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
08.10.2021, 23:51 | 2 |
ivan_proger, надо перенести определение шаблона функции (
IncreasingSequenceGeneration ) в заголовочный файл (из .cpp в .h )
1
|
3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84
|
|
09.10.2021, 00:03 [ТС] | 3 |
gray_fox, возможно, я чего-то не понимаю, но разве тогда не теряется концепция разнесения объявления и определения функции по разным файлам? Неужели их нельзя хранить раздельно?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
09.10.2021, 00:10 | 4 |
Шаблон - это не функция. Это образец, по которому компилятор сделает функцию.
Так вот, чтобы это было возможно, в точке использования должен быть доступ к определению шаблона. Иначе как компилятор узнает каким образом делать для вас функцию?
1
|
3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84
|
|
09.10.2021, 00:18 [ТС] | 5 |
DrOffset, т.е. я правильно понимаю, что заголовочный файл с шаблоном по изложенным причинам должен содержать определение, а для известной функции допускается только объявление с последующим определением в другом файле с расширением .cpp?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
09.10.2021, 00:22 | 6 |
Сообщение было отмечено ivan_proger как решение
Решение
Хуже нет ситуации, когда некие "концепции" повторяются без понимания их сути.
Если кто-то вам говорит, что делать Х - хорошо, это совершенно не значит, что делать Х нужно всегда и везде. В типовом случае - да. Но это опять же не аксиома. Нет никакого "допускается только". Функция с полным определением может быть в заголовочном файле, если она inline или static, с соответствующими каждой из этих ситуаций эффектами.
0
|
3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84
|
|
09.10.2021, 00:34 [ТС] | 7 |
DrOffset, вы безусловно правы, спасибо!
0
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
09.10.2021, 00:40 | 8 |
Сообщение было отмечено ivan_proger как решение
Решение
Возможно, но так устроен язык - если вы разместили определение шаблона в файле с исходным кодом, то только там вы и его и сможете использовать.
Т.к. шаблон по сути "макет" (класса или функции), то никакого кода из него самого по себе компилятор (в отличии от обычных классов или функций) при компиляции не генерирует - только когда вы этот шаблон используете. Когда в своём коде вы вызываете шаблон функции компилятор должен, используя информацию о типах/значениях параметров шаблона, сгенерировать определение именно для этих параметров шаблона (аналогично для шаблона класса) - это называется инстанциировнием шаблона. Для того, что бы это сделать, определение этого шаблона должно быть доступно компилятору (компилятор должен его "видеть", если хотите). Классичесий процесс сборки C++ (и C) кода таков, что компилятор сначала компилирует единицы трансляции (ваши .cpp ) файлы раздельно, ничего не зная о других единицах трансляции, в объектные файлы, и только потом эти объектные файлы компануются в приложение или библиотеку. Поэтому, что бы инстациировать шаблон в разных единицах трансляции, его определение надо размещать в заголовочном файле.
1
|
09.10.2021, 00:40 | |
09.10.2021, 00:40 | |
Помогаю со студенческими работами здесь
8
Неопределенная ссылка на символ Неопределенная ссылка на деструктор Неопределённая ссылка на «vtable for Animal» Неопределенная ссылка на конструктор(шаблоны) Неопределенная ссылка при многофайловой реализации шаблона Неопределенная ссылка при использовании шаблонного класса Неопределённая ссылка на функцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |