0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 14
|
|||||||||||
1 | |||||||||||
Перегрузка для шаблонного класса12.11.2018, 12:10. Показов 1337. Ответов 9
Метки нет (Все метки)
Есть шаблонный класс, который определен в заголовочном файле(list.h)
Определение перегрузки вывода во втором файле(list.cpp) Компилятор ошибок не выдает, но линковщик выдал ошибку LNK1120 и LNK2019. Сайт майкрософта в итоге привел меня к фразе: "Определение шаблона члена находится за пределами класса. Visual C++ имеет ограничение, в котором шаблоны членов должны быть полностью определены в включающего класса." Значит ли это, что мне нужно определять перегрузку оператора в заголовочном файле? Вот код: Файл list.h
0
|
12.11.2018, 12:10 | |
Ответы с готовыми решениями:
9
Перегрузка << , >> для шаблонного класса Перегрузка [][] для шаблонного класса Перегрузка оператора -> для шаблонного класса Перегрузка operator<< для шаблонного класса |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
|
12.11.2018, 12:17 | 2 |
Нельзя компилировать отдельно файл list.cpp, т.к. компилятор не будет инстанцировать этот шаблон.
Переносите всё в list.h
0
|
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 14
|
|
12.11.2018, 12:22 [ТС] | 3 |
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
||||||
12.11.2018, 12:32 | 4 | |||||
#include "stdafx.h" был выкинут? list.cpp удалил?
Должно было получиться примерно
0
|
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 14
|
|
12.11.2018, 12:44 [ТС] | 5 |
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
12.11.2018, 12:49 | 6 |
Ту же или новую?
0
|
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 14
|
|
12.11.2018, 12:51 [ТС] | 7 |
Те же самые ошибки линковщика
Вторая ошибка: "Ошибка LNK2019 ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class List<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$List@H@@@Z) в функции _main" Может ошибка не в самой перегрузке и ее реализации? .-.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
||||||||||||||||
12.11.2018, 12:59 | 8 | |||||||||||||||
Сообщение было отмечено Bash_B00M как решение
Решение
Аа... Всё понял. Нужно задавать не
Добавлено через 5 минут Конечно, в этом случае friend-функциями станут любые объявленные ostream& operator<<(ostream &os, const List<T2>&myList), в том числе с T2 отличающимся от T , которым параметризирован класс. Но уже с этим бороться наверно уже не получится, т.к. частичная специализация шаблонной функции (в отличии от класса) недопустима.
1
|
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 14
|
|
12.11.2018, 13:06 [ТС] | 9 |
Спасибо, все решилось
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
||||||
12.11.2018, 15:19 | 10 | |||||
Почему? Специализация тут будет полная, а не частичная. Можно сделать так
1
|
12.11.2018, 15:19 | |
12.11.2018, 15:19 | |
Помогаю со студенческими работами здесь
10
Перегрузка cout<< для шаблонного класса Перегрузка оператора -> для шаблонного класса Перегрузка оператора вывода на консоль для шаблонного класса Перегрузить operator<<() для шаблонного класса (перегрузка оператора вывода) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |