|
26 / 26 / 15
Регистрация: 30.12.2015
Сообщений: 95
|
|||||||||||
Ошибка: "error LNK2001: неразрешенный внешний символ" при реализации шаблонного синглтона11.04.2016, 23:36. Показов 2461. Ответов 13
Метки нет (Все метки)
Доброго времени суток. Пытаюсь написать шаблон для синглтона, есть след. код
Сам шаблон синглтона
error LNK2001: неразрешенный внешний символ ""private: static class BAT::CLogManager * BAT::ISingleton<class BAT::CLogManager>::_instance" (?_instance@?$ISingleton@VCLogManager@BA T@@@BAT@@0PAVCLogManager@2@A)" 1>..\debug_dir\x86\bat_api_x86_d.dll : fatal error LNK1120: неразрешенных внешних элементов: 1 _BAT_API_ - макрос dllexport. Подскажите в чем причина. Заранее благодарю.
0
|
|||||||||||
| 11.04.2016, 23:36 | |
|
Ответы с готовыми решениями:
13
Error LNK2001: неразрешенный внешний символ Error LNK2001: неразрешенный внешний символ Error LNK2001: неразрешенный внешний символ |
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||
| 11.04.2016, 23:41 | |||||||
|
Надо после тела шаблона еще добавить:
1
|
|||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
| 12.04.2016, 00:00 | ||||||
|
elephants,
Если у вас С++11 и не нужно управлять временем жизни, то проще и потокобезопасней вот так:
1
|
||||||
|
26 / 26 / 15
Регистрация: 30.12.2015
Сообщений: 95
|
||||||||||||||||
| 12.04.2016, 01:04 [ТС] | ||||||||||||||||
|
А где в таком случае 2й раз вызывается конструктор CLogManager()? Там в реализации сообщение выводится при вызове конструктора, и выводится оно 2 раза...
Добавлено через 30 минут Вот вся реализация класса
Добавлено через 3 минуты А если перенести получение экземпляра в мэйн
0
|
||||||||||||||||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|||
| 12.04.2016, 09:46 | |||
|
1
|
|||
|
26 / 26 / 15
Регистрация: 30.12.2015
Сообщений: 95
|
|
| 12.04.2016, 19:56 [ТС] | |
|
DrOffset, вообще речь идет об API игрового движка (да сложно, даже я бы сказал архи сложно для меня на данный момент.. но на ошибках учатся (не планирую писать аля cry engine..)). Задача в следующем: в апи хочу включить так сказать базу, т.е. ввод, графика, звук, логи и прочие базовые подсистемы, которые должны существовать в виде синглтона. А в последствии прикручивать к проекту самой игры данную dll-ку и оттуда вызывать методы этих объектов. И в таком случае требуется шаблон синглтона, создающий ед. экземпляр шаблонного типа. Конечно желательно этот шаблон сделать общедоступным для случаев, если, например в коде самой игры потребуется что либо в ед. экземпляре. Но базу хотелось бы заложить в dll, что бы она была определена. Вариант с отдельными синглтонами конечно проще, пока пробую через шаблоны.
0
|
|
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 12.04.2016, 20:08 | ||
|
Добавлено через 3 минуты
1
|
||
|
26 / 26 / 15
Регистрация: 30.12.2015
Сообщений: 95
|
|||||||
| 12.04.2016, 20:13 [ТС] | |||||||
|
Собственно, можно проблему решить создав хидер в проекте игры и написав там следующее
Добавлено через 3 минуты
0
|
|||||||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 12.04.2016, 20:15 | ||
|
0
|
||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
||
| 12.04.2016, 20:24 | ||
|
В твоем случае проблемы появляются, если "пользователи" шаблона синглтона будут и со стороны dll и со стороны exe. Т.к. это два разных исполняемых модуля, функция instance вызванная и там и там, приведет к созданию двух экземпляров синглтона, что противоречит здравому смыслу. Нужно очень четко понимать что такое шаблон - это инструмент времени компиляции. Кроссмодульное связывание он обеспечить не сможет (в том смысле, что невозможно проконтролировать инстанцирование шаблона в другом исполняемом модуле). Ты же сам убедился выше, что у тебя создается два экземпляра CLogManager. Ну какие еще вопросы могут быть? Не нужно шаманить - разберись.
0
|
||
|
26 / 26 / 15
Регистрация: 30.12.2015
Сообщений: 95
|
|
| 12.04.2016, 20:53 [ТС] | |
|
И еще один вопрос возник... В какой момент времени будут вызываться деструкторы объектов синглтона, и будут ли они вообще вызываться (могу предположить что при завершении приложения они вызваны не будут)..
0
|
|
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
||
| 12.04.2016, 21:09 | ||
|
1
|
||
|
26 / 26 / 15
Регистрация: 30.12.2015
Сообщений: 95
|
|
| 12.04.2016, 21:45 [ТС] | |
|
Остановлюсь пока на варианте из 3-го поста, всем спасибо за помощь.
0
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
| 12.04.2016, 22:08 | |
|
А у меня там ошибочка.
![]() noexcept(T()) -> нужно заменить на noexcept(noexcept(T()))
0
|
|
| 12.04.2016, 22:08 | |
|
Помогаю со студенческими работами здесь
14
Error LNK2001: неразрешенный внешний символ Error LNK2001: неразрешенный внешний символ Error LNK2001: неразрешенный внешний символ Error LNK2001: неразрешенный внешний символ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|