|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 1
|
||||||||||||||||
Ошибки в VS 2019: LNK2019 и LNK 112003.05.2019, 21:57. Показов 7144. Ответов 14
Привет, форумчане! Не могу исправить четыре ошибки:
~lab_1 header.h
0
|
||||||||||||||||
| 03.05.2019, 21:57 | |
|
Ответы с готовыми решениями:
14
Выдает ошибку (LNK 2019) в коде Ошибка LNK 2019: ссылка на неразрешенный внешний символ LNK 2019 и extern "C" |
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
|
|||
| 04.05.2019, 01:02 | |||
|
Добавлено через 4 минуты И что у тебя .cpp в ресурсах делают? Это source, а не resource.
0
|
|||
|
0 / 0 / 0
Регистрация: 19.09.2021
Сообщений: 11
|
||||||||||||||||
| 19.09.2021, 14:00 | ||||||||||||||||
|
У меня похожая проблема.
Попытка вынести реализацию шаблона класса в отдельный файл (Test.h, Test.cpp) приводит к ошибке на этапе сборки. Если перенести код из Test.cpp в MainTest.cpp к функции main(), то сборка происходит без ошибок. Если отказаться от шаблона, а прописать для int, то сборка тоже происходит без ошибок. Ошибка LNK2019 ссылка на неразрешенный внешний символ "public: __thiscall Test<int>::Test<int>(int)" (??0?$Test@H@@QAE@H@Z) в функции _main. Test C:\Users\User\source\repos\Test\Test\Tes tMain.obj 1 https://github.com/sergeyrokhin/Test В случае, если удалю этот тестовый репозиторий: Test.h
0
|
||||||||||||||||
|
фрилансер
6476 / 5698 / 1131
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 19.09.2021, 14:32 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 19.09.2021
Сообщений: 11
|
||||||
| 19.09.2021, 15:10 | ||||||
|
Я подозревал, что для использования класса компилятор должен создать по шаблону соответствующие определения.
Но не понятно было, почему бы компилятору не посмотреть во все модули и найти все используемые типы. Получается, что требуется явно указать, какие типы будут использоваться Решение: достаточно в модуль Test.cpp добавить строку
https://stackoverflow.com/ques... eader-file
0
|
||||||
|
фрилансер
6476 / 5698 / 1131
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 19.09.2021, 15:38 | |
|
rokhin, но тогда все используемые типы так придётся в этом месте перечислить. Если такое решение устраивает, то ок
https://onlinegdb.com/3pJ-YGzucq
0
|
|
|
0 / 0 / 0
Регистрация: 19.09.2021
Сообщений: 11
|
|
| 19.09.2021, 15:51 | |
|
Да, перечислять - это плохое решение.
А как заставить компилятор искать во всех модулях упоминания экземпляров шаблона?
0
|
|
|
фрилансер
6476 / 5698 / 1131
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 19.09.2021, 15:56 | |
|
rokhin, никак
Шаблон не генерирует кода, пока его не использовали для определения Если прописывать типы нет возможности, то придётся оставить весь шаблон в заголовке
0
|
|
|
0 / 0 / 0
Регистрация: 19.09.2021
Сообщений: 11
|
|
| 19.09.2021, 18:21 | |
|
А почему компилятор, увидев использование шаблона, не может скомпилировать для этого использования соответствующую реализацию?
0
|
|
|
0 / 0 / 0
Регистрация: 19.09.2021
Сообщений: 11
|
|
| 20.09.2021, 11:08 | |
|
Алексей1153, Получается, что придется *.cpp превратить в *.h
т.е. *.cpp не нужны? И ещё. Если будет много модулей cpp, где будет использоваться этот заголовочный файл, то в каждом модуле будет компилироваться своя функция?
0
|
|
|
фрилансер
6476 / 5698 / 1131
Регистрация: 11.10.2019
Сообщений: 15,175
|
||
| 20.09.2021, 11:14 | ||
|
rokhin, да, весь код шаблона придётся перенести в заголовок
Добавлено через 3 минуты в каждом cpp будет компилиться один экземпляр функции каждого типа аргумента
0
|
||
|
Вездепух
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,297
|
|||
| 21.09.2021, 17:15 | |||
|
А вы предлагаете "спрятать" определение шаблона куда-то в .cpp файл. Из чего компилятор будет "компилировать реализацию", если теперь он не видит определение шаблона?
1
|
|||
|
0 / 0 / 0
Регистрация: 19.09.2021
Сообщений: 11
|
|
| 21.09.2021, 17:40 | |
|
почему бы не поискать определение шаблона в модулях проекта?
Наверняка есть этому причина, и я уже смирился, что код будет написан в заголовочном файле. Но это размещение портит хорошую идею шаблона, и модульности проекта, и будет компилироваться одинаковый код для всех модулей, где будет встречаться использование шаблона. Добавлено через 3 минуты ну если сборщик удалит, то молодец. но почему бы не "докомпилировать" то, что не нашел.
0
|
|
|
Вездепух
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,297
|
|||
| 21.09.2021, 18:01 | |||
.cpp файлы), которые с испокон веков компилируются строго независимо, тщательно изолированно от любых других единиц трансляции. Компилятор не может ничего нигде "искать". Компилятор не имеет права даже знать о существовании какие-то других единиц трансляции. Это важнейший фундаментальный принцип - принцип независимой трансляции - на котором построен весь процесс компиляции в С и С++. Знание о всех компонентах программы доступно только линкеру, но не компилятору. Компилятор всегда работает в изолированной "песочнице": в единственной единице трансляции. Поддержка модулей в С++ появилась в С++20, но это совсем другая история. Добавлено через 4 минуты Альтернативные реализации когда-то существовали (Sun Solaris), в которых шаблоны компилировались в несколько проходов: первым проходом просто анализировался исходный код и коллекционировались все версии шаблонов, которые фактически понадобятся, вторым проходом генерировался фактический код для них, сразу в единственном экземпляре. Но это делалось в первую очередь для того, чтобы не тратить производительность на генерацию повторяющегося кода. Однако с ростом производительности платформ такая экономия оказалась не нужной. Проще просто тупо сгенерировать множество копий кода, а потом вычистить дубликаты. (Плюс у вас еще есть явное инстанцирование для оптимизации этого процесса, если вы захотите этим заняться).
0
|
|||
|
0 / 0 / 0
Регистрация: 19.09.2021
Сообщений: 11
|
|
| 09.09.2022, 09:19 | |
|
Проблема компилятора и сборщика мне стала понятна из обсуждений.
И мне тоже не сильно помогли советы гуру. Но сегодня нашел ссылку в документации Microsoft, которая всё объяснила, предложила два способа решения и дала рекомендации по предпочтениям этих способов. Документация: https://docs.microsoft.com/ru-... -templates
0
|
|
| 09.09.2022, 09:19 | |
|
Помогаю со студенческими работами здесь
15
Устранение ошибки LNK2019
LNK 2019 ссылка на неразрешенный внешний символ в функции _main; LNK 1120 неразрешенных внешних элементов: 1 LNK 1120 & LNK2019 (WinAPI) Работа с tinyxml ошибки LNK 2019 и LNK 2001 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|