Сёха 0 4 октября, 2022 Опубликовано 4 октября, 2022 (изменено) · Жалоба Всем привет! Работаю в STM32CubeIDE 1.9.0. Пытаюсь добавить шаблонный метод в класс. Код предварительно проверен в Visual Studio 2022, работает. class __AD9954__ { public: __AD9954__(); //~__AD9954__(); void write(void *reg); void read(void *reg); void AD_UPDATE(void); template <typename T> void test(T *reg); private: template <typename T> void __AD9954__::test(T *reg) { } При попытке вызвать метод из основной программы получаю ошибку... /* USER CODE BEGIN 2 */ __AD9954__ *AD9954 = new __AD9954__(); __CFR1__ *CFR1 = new __CFR1__(); AD9954->test(CFR1); main.cpp:104: undefined reference to `void __AD9954__::test<__CFR1__>(__CFR1__*)' Помогите разобраться с проблемой. Стандарт С++ 14. Изменено 4 октября, 2022 пользователем Сёха Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 132 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба 26 минут назад, Сёха сказал: class __AD9954__ { public: __AD9954__(); //~__AD9954__(); void write(void *reg); void read(void *reg); void AD_UPDATE(void); template <typename T> void test(T *reg); private: template <typename T> void __AD9954__::test(T *reg) { } Это все в одном файле находится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сёха 0 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба Нет, объявление класса в h, определение методов в cpp. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 132 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба Вот поэтому и не компилится. В момент инстанцирования компилятор должен видеть реализацию шаблона, она должна быть в заголовочном файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сёха 0 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба Сергей Борщ, спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться