-829 / 16 / 0
Регистрация: 22.09.2015
Сообщений: 901
|
||||||
1 | ||||||
Ошибка: specialization of '.' after instantiation23.11.2021, 22:29. Показов 3386. Ответов 7
Метки нет (Все метки)
Есть свой класс через шаблон для разных типов: template <typename dTYPE> class Array {}
Если в main создаю объект класса Array<LETTER> str; то всё нормально. Если в свойстве другого класса указываю,
Код
error: specialization of 'Array<dTYPE>::Array() [with dTYPE = char]' after instantiation Array<LETTER>::Array(){this->type="LETTER";} ^
0
|
23.11.2021, 22:29 | |
Ответы с готовыми решениями:
7
Ошибка при комилировании. Cannot use template 'texnika<T>' without specifying specialization parameters Почему выскакивает ошибка In instantiation of 'void stack_t<T>::println() const [with T = int]': - строка 165? error: explicit specialization in non-namespace scope - специализация шаблонов Ошибка "Error displaying the error page: Application Instantiation Error" CBuilder XE Cannot use template 'multiset<_Kty,_Pr,_Alloc>' without specifying specialization parameters F |
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
|
23.11.2021, 22:35 | 2 |
Значит, что шаблон уже был инстанцирован для типа char. Специализировать шаблон нельзя после инстанцирования. Ищи место в коде, где была точка инстанцирования.
0
|
-829 / 16 / 0
Регистрация: 22.09.2015
Сообщений: 901
|
||||||
23.11.2021, 22:43 [ТС] | 3 | |||||
Есть описание класса в заголовке .h, есть описание методов в .cpp
это вот тоже поддчёркивает
0
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,078
|
|
23.11.2021, 23:27 | 4 |
Почему описание методов оказалось в
.cpp ? Зачем было сделано разделение на .h и .cpp ?Так а что это такое? Для чего выполнена эта специализация? Зачем?
0
|
-829 / 16 / 0
Регистрация: 22.09.2015
Сообщений: 901
|
||||||||||||||||
24.11.2021, 09:37 [ТС] | 5 | |||||||||||||||
Для подключения и упрощения компиляции, а также работы IDE(вывода свойств объектов и тд.) так делается.
Вот файл Variables.h
то возникает ошибка. Не понимаю в чём дело и как исправить. Через этот конструктор я указываю тип массива, чтобы в любое время можно было узнать\проверить.
0
|
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
|
|
24.11.2021, 10:02 | 6 |
Вам в общем-то довольно ясно написал компилятор в чем дело:
Вы запросили инстанцирование базового шаблона для типа LETTER, а потом только предоставили специализации для него. Надо сделать наоборот. Специализации должны быть выше места инстанцирования (если все это происходит в одной единице трансляции). Ну так потому и нормально, что в этом случае вы перенесли точку инстанцирования ниже по коду, ниже ваших специализаций.
1
|
-829 / 16 / 0
Регистрация: 22.09.2015
Сообщений: 901
|
|
24.11.2021, 10:16 [ТС] | 7 |
DrOffset, Спасибо, теперь всё понятно.
0
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,078
|
||||||
24.11.2021, 11:33 | 8 | |||||
Не понял. Для какого "подключения и упрощения компиляции"? И при чем здесь "работы IDE"?
Нет, с шаблонным кодом так НЕ делается. Где вы такое видели? Все определения шаблонных сущностей должны сидеть во включаемом файле, то есть в вашем случае в .h файле. А вот явные специализации уже не являются шаблонными сущностями и, раз уж они вам понадобились, их определения должны располагаться в .cpp файле. Однако объявления всех этих специализаций должны присутствовать в .h файле. То есть все определения шаблонных методов у вас должны располагаться в .h файле, а также в .h файле должны присутствовать объявления специализаций
Намного проще было бы определить все ваши специализации inline и поместить все определения в .h файл. Тогда .cpp файла не понадобилось бы вообще.
1
|
24.11.2021, 11:33 | |
24.11.2021, 11:33 | |
Помогаю со студенческими работами здесь
8
Joomla 3.7.0 & PHP7: Error displaying the error page application instantiation error Error displaying the error page: Application Instantiation Error Error displaying the error page: Application Instantiation Error Error displaying the error page: Application Instantiation Error IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |