Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 01.08.2019
Сообщений: 12

При передаче template параметров в функцию компилятор ругается на "Неразрешенный внешний элемент"

09.10.2020, 22:59. Показов 1329. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте, уже неделю бьюсь над этой проблемой. Использую LuaBridge.

Main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void LogLua(char* msg)
{
    //Код функции...
}
 
CScriptSystem ScriptSystem;
 
...
 
ScriptSystem = CScriptSystem();
 
ScriptSystem.RegisterLuaObj("Log", "Msg", LogLua); // Вот строка с ошибкой
 
...
CScriptSystem.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class CScriptSystem
{
public:
 
    CScriptSystem();
    ~CScriptSystem();
 
    void LuaStart();
 
    template<class ReturnType, class... Params>
    void RegisterLuaObj(char* namespce, char* LuaName, ReturnType(*fp)(Params...));
    
    template<class ReturnType, class... Params>
    void RegisterLuaObj(char* LuaName, ReturnType(*fp)(Params...));
 
    //This func can get function, tables, perems and other...
    luabridge::LuaRef GetLuaObj(char* name);
 
    lua_State* GetLuaState();
 
private:
 
    lua_State* L;
    FileSystem fs;
};
CScriptSystem.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "CScriptSystem.h"
 
//Код
 
template<class ReturnType, class... Params>
void CScriptSystem::RegisterLuaObj(char* namespce, char* LuaName, ReturnType(*fp)(Params...))
{
    getGlobalNamespace(L).
        beginNamespace(namespce)
            .addFunction(LuaName, ReturnType(*fp)(Params...))
        .endNamespace();
}
 
template<class ReturnType, class... Params>
void CScriptSystem::RegisterLuaObj(char* LuaName, ReturnType(*fp)(Params...))
{
    getGlobalNamespace(L)
        .addFunction(LuaName, ReturnType(*fp)(Params...));
}
 
//Код
При компиляции выдает:
Code
1
error LNK2001: неразрешенный внешний символ "public: void __thiscall CScriptSystem::RegisterLuaObj<void,char *>(char *,char *,void (__cdecl*)(char *))" (??$RegisterLuaObj@XPAD@CScriptSystem@@QAEXPAD0P6AX0@Z@Z).
Я пробовал удалять тела этих функций - бесполезно.
Я честно уже не знаю почему возникает эта ошибка.
Заранее спасибо за ответы.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2020, 22:59
Ответы с готовыми решениями:

Одинаково ли быстродействие: 1. при передаче параметров в функцию или 2. создание кортежа и передаче его в функцию?
Одинаково ли быстродействие: 1. при передаче параметров в функцию или 2. создание кортежа и передаче его в функцию? Зависит ли это от...

Ссылка на неразрешенный внешний символ, неразрешенный внешний элемент
В программировании новичок, знакомство с подпрограммами. Помогите понять, в чем ошибка. Программа должна считать количество дней между...

Почему компилятор ругается на использование шаблона (template)?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;chrono&gt; #include &lt;ctime&gt; #include &lt;thread&gt; #include...

1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
09.10.2020, 23:30
Лучший ответ Сообщение было отмечено VAX325 как решение

Решение

Цитата Сообщение от VAX325 Посмотреть сообщение
Здравствуйте, уже неделю бьюсь над этой проблемой. Использую LuaBridge.
Перенеси реализацию своих методов из CScriptSystem.cpp в CScriptSystem.h. Шаблонные функции нельзя реализовывать в отдельном cpp-файле.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2020, 23:30
Помогаю со студенческими работами здесь

Связывание параметров при передаче их в функцию по трубе
Создание функции для опытов: function FUNC { param( $x, $y )

Меняются значения параметров при передаче в функцию
При запуске программы и вводе значений, в void draw значения width, height становятся равными 50. В чём моя ошибка? #include...

Не понятный баг при передаче параметров в функцию
Вообщем есть проблема в том, что во время отладки параметры, которые должна получить функция одни, а на деле совсем другие. for (int i...

Странная запись при передаче флагов как параметров в функцию
Здравствуйте. Возникла необходимость использования функции StringReplace в коде и я обнаружил, что флаги в качестве аргументов в ней...

Компилятор выдает ошибку, LNK2019 ссылка на неразрешенный внешний символ
Программа не запускается, где-то ошибка не могу понять где. Помогите найти! Файлы из программы вот хэдер mydialog.h #ifndef...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru